-
1.在函数中进行10个学生成绩从高到低排名 sort(int a[10])。 改进第一步的函数为sort(int a[],int n),进行...
2018-07-12 09:37:22#include<stdio.h>int main(){ int sort_a(int a[],int n,char style); int a[100],i,n; char style; printf("请输入有多少学生n和style\n"); scanf("%d %c"... ...#include<stdio.h>
int main()
{
int sort_a(int a[],int n,char style);
int a[100],i,n;
char style;
printf("请输入有多少学生n和style\n");
scanf("%d %c",&n,&style);
printf("请输入n个学生的成绩\n");
for(i=0;i<n;i++)
scanf("%d",&a[i]);
sort_a(a,n,style);
printf("排序后\n");
for(i=0;i<n;i++)
printf("%d\n",a[i]);
}
int sort_a(int a[],intn,char style)
{
int i,j,temp;
if(style=='a')
{
for(j=1;j<n;j++)
for(i=0;i<n-j;i++)
if(a[i]>a[i+1])
{
temp=a[i];
a[i]=a[i+1];
a[i+1]=temp;
}
}
if(style=='d')
{
for(j=1;j<n;j++)
for(i=0;i<n-j;i++)
if(a[i]<a[i+1])
{
temp=a[i];
a[i]=a[i+1];
a[i+1]=temp;
}
}
return 0;
}
-
算法笔记(十一)sort函数考场排名
2018-06-07 11:08:43现在给出各个考场中的考生的准考证号与分数,要求所有考生按照考生分数从高到低排序,并按顺序输出所有考生的准考证号,排名,考场号以及考场内排名。思路:在student结构体类型中存放题目信息(准考证号,分数,...题目:
有n个考场,每个考场有若干数量的考生。现在给出各个考场中的考生的准考证号与分数,要求所有考生按照考生分数从高到低排序,并按顺序输出所有考生的准考证号,排名,考场号以及考场内排名。
思路:
在student结构体类型中存放题目信息(准考证号,分数,考场号,考场内排名)
分数不相同时,按照分数从大到小排,否则按照学号从小到大排序
代码:
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
struct Student{
char id[15]; //准考证号
int score; //分数
int location_number; //考场号
int local_rank; //考场内排名
}stu[30010];
bool cmp(Student a, Student b)
{
if(a.score != b.score) return a.score > b.score; //先按分数大小排序
else return strcmp(a.id, b.id); //分数相同按照id准考证号排序
}
int main()
{
int n, k, num=0; //num总考生数
scanf("%d", &n); //n考场数
for(int i=0; i<=n; i++){
scanf("%d", &k); //该考场内人数
for(int j=0; j<=k; j++){
scanf("%s %d", stu[num].id, &stu[num].score);
stu[num].location_number = i; //该考生的考场号为i
num++; //总考生数加1
}
sort(stu+num-k, stu+num, cmp); //将该考场的考生排序
stu[num-k].local_rank = 1; //该考场第1名的local_rank记为1
for(int j=num-k+1; j<num; j++){ //对该考场剩余的考生
if(stu[j].score == stu[j-1].score) //如果与前一位考生同分
{
stu[j].local_rank = stu[j-1].local_rank;
}else{ //不同分
stu[j].local_rank = j+1-(num-k);
}
}
}
printf("%d\n", num); //输出总考生数
sort(stu, stu+num, cmp); //将所有考生排名
int r=1; //当前考生排名
for(int i=0; i<num; i++)
{
if(i>0&&stu[i].score != stu[i-1].score){
r = i+1; //更新当前考生排名
}
printf("%s", stu[i].id);
printf("%d%d%d\n", r,stu[i].location_number, stu[i].local_rank);
}
return 0;
} -
sql实例:成绩排名,日期函数及格式转换
2015-12-16 08:52:35按各种技术的平均分从高到低排列:平均分,师傅姓名,技术名称(检验哪个师傅教的好) select AVG(result) as avg_result,master_name,course_name from TEST_TABLE group by course_name,master_name order by avg...--1.按各种技术的平均分从高到低排列:平均分,师傅姓名,技术名称(检验哪个师傅教的好) select AVG(result) as avg_result,master_name,course_name from TEST_TABLE group by course_name,master_name order by avg(result) desc; --2.排列各种技术成绩最高和最低的相关记录: (就是各中技术的最高、最低分的徒弟和师傅) --技术ID,技术名称,师傅姓名,徒弟姓名,最低分,徒弟姓名,最高分 --select course_id,course_name,master_name,MIN(result) as min_result,MAX(result) as max_result from TEST_TABLE --group by course_id,course_name,master_name; SELECT Y.N1 AS course_id,Y.N2 as course_name,Y.N4 as master_name,x.m4 as apprentice_name,X.M3 AS min_result,Y.N3 as apprentice_name,Y.N5 as max_result from (select t4.course_id as M1,t4.master_name AS M2,t3.b AS M3,t4.apprentice_name as M4 from TEST_TABLE t4, (select course_id,min(result) as b from TEST_TABLE group by course_id)as t3 where t4.course_id=t3.course_id and t4.result=t3.b )as X, (select t1.course_id AS N1,t1.course_name AS N2,t1.apprentice_name AS N3,t1.master_name AS N4,t2.a AS N5 from TEST_TABLE t1, (select course_id,max(result) as a from TEST_TABLE group by course_id)as t2 where t1.course_id=t2.course_id and t1.result=t2.a )as Y WHERE X.M1=Y.N1 --3.按平均成绩从高到低顺序,排列所有徒弟的四种技术成绩: (就是每个徒弟的四种技术的成绩单) --徒弟ID,徒弟姓名,探伤,除锈,涂镀,打磨,有效技术,有效平均分 select apprentice_id,apprentice_name,avg(Result)as av from TEST_TABLE group by apprentice_id,apprentice_name SELECT apprentice_id,apprentice_name, isnull(Sum(case course_id when 'C1' then result end),0) as crack_detection, isnull(Sum(case course_id when 'C2' then result end),0) as eliminate_rust, isnull(Sum(case course_id when 'C3' then result end),0) as plation, isnull(Sum(case course_id when 'C4' then result end),0) as polish, isnull(Sum(case when(result is not null) then 1 end),0) as amount, AVG(result)as av FROM TEST_TABLE group by apprentice_id,apprentice_name order by av --4.按各种技术平均成绩从低到高和不及格率的百分数从高到低顺序,统计各种技术平均成绩和不及格率的百分数: (就是分析哪种技术难) --技术ID,技术名称,平均成绩,不及格百分比 select course_id,course_name,AVG(result) as av, cast(cast (sum(case when result<60 then 1 else 0 end)*100/(count(1)*1.0) as float) as nvarchar)+'%'as 不及格率 from TEST_TABLE group by course_id,course_name order by 不及格率 desc,av asc --5.排列涂镀成绩第3名到第5名的徒弟成绩单(要求用外连接做,左右不限): --徒弟ID,徒弟姓名,涂镀,成绩 /*select top 2 * from( select top 2 * from TEST_TABLE X LEFT JOIN TEST_TABLE Y ON X.course_name=Y.course_name and X.apprentice_id=Y.apprentice_id where X.course_name='涂镀' order by X.result desc)*/ ----------------------------------------------------------------------- select apprentice_id,apprentice_name,course_name,result from ( select *,ROW_NUMBER() over(order by result desc)as rid from TEST_TABLE where course_name='涂镀' )temp where rid between 3 and 5 order by rid ------------------------------------------------------------------------- /*select ROW_NUMBER() over(order by result desc)as rid from TEST_TABLE select top 5* from TEST_TABLE where apprentice_id not in ( select top 2* from TEST_TABLE order by result desc ) order by result desc*/ ------------------------------------------------------ --7.排列徒弟平均成绩及其名次(选作) select ROW_NUMBER() over(order by avg(result) desc)as place,apprentice_name,AVG(result)as avg_result from TEST_TABLE group by apprentice_name order by place --6.任选两个实现,要求格式为yyyy/mm/dd --一个月第一天 select dateadd(dd,-day(getdate())+1,getdate()) --先获取当前日期的天数减1得到一个数,再由当前日期的天数减去它得到当月第一天 Select CONVERT(varchar(100), dateadd(dd,-day(getdate())+1,getdate()), 111) ------------------------------------------------------------------------------ SELECT DATEADD(mm, DATEDIFF(mm,0,getdate()), 0) --getdate(),返回当前的日期和时间的函数 --DATEDIFF(mm,0,getdate())是计算当前日期和“1900-01-01 00:00:00.000”这个日期之间的月数 --DATEADD,增加当前日期到“1900-01-01”的月数 Select CONVERT(varchar(100), DATEADD(mm, DATEDIFF(mm,0,getdate()), 0), 111) --本周的星期一 select CONVERT(varchar(100),DATEADD(ww,DATEDIFF(ww,0,getdate()),0),111) --一年的第一天 select CONVERT(varchar(100),DATEADD(yy,DATEDIFF(yy,0,getdate()),0),111) --季度的第一天 select CONVERT(varchar(100),DATEADD(qq,DATEDIFF(qq,0,getdate()),0),111) --上个月的最后一天 select CONVERT(varchar(100),dateadd(ms,-3,DATEADD(mm,DATEDIFF(mm,0,getdate()),0)),0),111) --去年的最后一天 select CONVERT(varchar(100),DATEADD(yy,DATEDIFF(yy,0,getdate())-1,0),111) select CONVERT(varchar(100),dateadd(ms,-3,DATEADD(yy,DATEDIFF(yy,0,getdate()),0)),111) --本月的最后一天 select CONVERT(varchar(100),dateadd(ms,-3,DATEADD(mm,DATEDIFF(mm,0,getdate())+1,0)),111) --本年的最后一天 select CONVERT(varchar(100),dateadd(ms,-3,DATEADD(yy,DATEDIFF(yy,0,getdate())+1,0)),111) --本月的第一个星期一 select CONVERT(varchar(100),dateadd(WK,DATEDIFF(wk,0,dateadd(dd,6-datepart(day,getdate()),getdate())),0),111) --7.由于业务逻辑需要,要同时更新(update)两个table,如果第一个table更新成功, --第二个更新失败,那么现在的做法是把第一个table再改回去。请重新设计,使之更合理。 DECLARE @sumerror INT set @sumerror=0 BEGIN TRANSACTION SET @sumerror=@sumerror+@@ERROR; --修改table1的语句 update TEST_TABLE set result=1 where master_name='张大师' SET @sumerror=@sumerror+@@ERROR; IF(@sumerror<>0)--修改成功 BEGIN set @sumerror=0 --修改table2的语句 update Result set result=0; SET @sumerror=@sumerror+@@ERROR; IF(@sumerror<>0) BEGIN--修改成功就提交事务 ROLLBACK TRANSACTION; END ELSE BEGIN--否则事务回滚 COMMIT TRANSACTION; END END ELSE BEGIN--否则事务回滚 COMMIT TRANSACTION; END
-
力扣题(mysql)12.分数排名(dense_rank()函数的运用)
2020-06-02 16:59:53题干: 编写一个 SQL 查询来实现分数排名。 如果两个分数相同,则两个分数排名...例如,根据上述给定的 Scores 表,你的查询应该返回(按分数从高到低排列): Score Rank 4.00 1 4.00 1 3.85 2 3.65题干:
编写一个 SQL 查询来实现分数排名。如果两个分数相同,则两个分数排名(Rank)相同。请注意,平分后的下一个名次应该是下一个连续的整数值。换句话说,名次之间不应该有“间隔”。
Id Score 1 3.50 2 3.65 3 4.00 4 3.85 5 4.00 6 3.65 例如,根据上述给定的 Scores 表,你的查询应该返回(按分数从高到低排列):
Score Rank 4.00 1 4.00 1 3.85 2 3.65 3 3.65 3 3.50 4 分析:
- 要想解这道题,首先要掌握排序的基本方式
因为是根据分数来进行降序排名,所以我们可以写
select score from scores order by score desc;
- 对于获取排名这部分,我们可以用两个表进行比较,然后用count函数统计比另一个表高的分数,就可以获取rank值
select count(distinct a.score) from scores a where b.score>=a.score as 'rank';
- 对于列就用as,如as score ,as rank等,就可以了,将这三者组装起来就完成了这一道题
解答:
(1017ms)这里的rank是关键字所以要加上‘’select a.score as score ,(select count(distinct b.score) from scores b where a.score >= b.score) as 'rank' from scores a order by a.score desc;
后面oracle开发出了开窗函数,所以直接调用函数也是美滋滋的(234ms)
select Score, dense_rank() over (order by Score desc) as `Rank` from Scores;
关于一些排序的函数:
可以去
rank() over,dense_rank() over,row_number() over的区别
里面学习 - 要想解这道题,首先要掌握排序的基本方式
-
EXCEL函数公式集
2010-03-16 03:26:38倒数排名函数是什么 如何实现每日各车间产量的排名 分数相同时按照一科的分数进行排名 筛选后自动产生序列号并汇总 如何筛选奇数行 函数筛选姓名 名次筛选 如何实现快速定位(筛选出不重复值) 如何请在N列中列出A1:... -
Mysql8.0使用窗口函数解决排序问题
2020-01-06 19:06:09例如:我们要计算销售人员的销售额,结果按从高到低排序,查询结果中要包含销售的排名。 1、计算销售人员的销售额,结果按从高到低排序 这一部分我们可以直接使用group by对销售人员分组,使用聚合函数sum对销售额... -
结构体的使用及sort函数
2017-11-05 10:50:57先按总分从高到低排序,如果两个同学总分相同,再按语文成绩从高到低排序,如果两个同学总分和语文成绩都相同,那么规定学号小的同学 排在前面,这样,每个学生的排序是唯一确定的。 任务:先根据输入的3门课的... -
Excel下的数据挖掘:学生成绩统计分析实战之排名
2020-03-31 21:58:57第5章 排名 5.1使用RANK函数排名 5.1.1 RANK 函数的语法和用法 ... 排名是成绩统计中经常用到的操作,最简单的是将成绩按从高到低顺序排序,然后排出1,2,3……名,这个按顺序排序的方法,对于同分的,本来都... -
先用再理解 一个模板解决sql窗口函数问题
2020-05-03 19:13:27文章目录简介窗口函数经典窗口函数rank()dense_rank()row_number()经典问题topN输出排名问题...但是我们至少要先用起来,或者是从效率低的写法开始,慢慢的你会感受到更好的方法的。总之,先用就对了,实践起来。 “... -
SQL Server Window Function 窗体函数读书笔记一 - SQL Windowing
2013-08-06 21:14:00SQL Server窗体函数主要用来处理由OVER子句定义的行集,主要用来分析和处理 ...先看一个简单的应用 - 按照订单额从高到低对订单表信息做一个排名 USE TSQL2012 GO SELECT orderid, orderdate... -
SQL Server 2005系列教学(5) 排序及常用聚集函数
2017-11-14 19:32:00比如,一个表我们可以按年龄从大到小或从小到排列,按性别重新排列,我们考过试后老师要给大家按照分数从高到低排名次等等 主键的作用仅仅是为了保证记录的唯一性,而不是对数据排序。 语法:select字段名列表from表.... -
Excel 2010函数应用速查手册
2016-07-29 15:56:18用例1:统计从发货至收到货款的时间(NOW) 源文件:光盘\源文件\04\04.xlsx 用例2:计算奖金(MINUTE) 源文件:光盘\源文件\04\019.xlsx 用例3:计算产品生产时间(SECOND) 源文件:光盘\源文件\04\021.xlsx... -
将类中的成员函数写出来后,报错:本地函数非法
2013-06-17 05:50:17#include #include #include #include #include #include<cstdlib> ... s[i]= Student(name, number,age,xingbie,banji,birthday,dizhi,phone,mail,cpro,english,math,sport,java,allscore,average);... -
Excel函数活用范例大辞典(全新版).何先军.2015-2(带书签高清文字版).pdf
2018-12-18 16:27:31◎排名函数 188 097 对员工上半年销售业绩进行排名 188 098 查询指定学生的成绩排名 190 099 求同龄异性员工的人数 194 ◎频率分布函数 196 100 求跳远测试中出现次数最多的成绩 196 101 查询材料采购最... -
mysql rank_MySQL实现rank排名(二)leetcode练习
2021-01-18 18:45:13题目:编写一个 SQL 查询...例如,根据上述给定的 Scores 表,你的查询应该返回(按分数从高到低排列):解题思路:由于mysql没有窗口函数,这道题可以使用上文提到的用户变量 @rank 来实现。select Score,Rank from ... -
【C语言】结构体数组作为函数参数的排序问题
2018-11-21 14:56:21(3) 按总成绩从高到低排名,并按名次输出每个学生的情况,包括: 学号,各科成绩,平均成绩,总成绩,排名 我写的代码如下 问题在于,输入、计算部分都没有问题,但是,运行结果显示,**并没有进行排序... -
mysql 实现排行榜_MySQL实现rank排名(二)leetcode练习
2021-01-19 02:10:38题目:编写一个 SQL 查询...例如,根据上述给定的 Scores 表,你的查询应该返回(按分数从高到低排列):解题思路:由于mysql没有窗口函数,这道题可以使用上文提到的用户变量 @rank 来实现。select Score,Rank from ... -
mysql if 不等于_MySQL实现rank排名(二)leetcode练习
2021-01-16 05:20:43例如,根据上述给定的 Scores 表,你的查询应该返回(按分数从高到低排列):解题思路:由于mysql没有窗口函数,这道题可以使用上文提到的用户变量 @rank 来实现。刚开始参考这篇文章https://www.cn... -
mysql 变量定义和赋值_MySQL实现rank排名(二)leetcode练习
2020-12-05 08:24:03例如,根据上述给定的 Scores 表,你的查询应该返回(按分数从高到低排列):解题思路:由于mysql没有窗口函数,这道题可以使用上文提到的用户变量 @rank 来实现。刚开始参考这篇文章https://www.cn... -
excel筛选排序从小到大_Excel新增公式 好用到爆
2021-01-07 00:40:24前几天,又更新了Excel...先看看图表效果:显而易见前后5名的差距,数据也是从高到低进行排列,而且如果数据有变化,图表也会跟着排名情况自动更新,现在图表基本都不会是静态图了,都是做好模板之后直接更新结果自... -
C语言小项目(精心汇编).PDF
2020-10-12 22:14:402从键盘输入 10 个学生成绩 3采用冒泡法将学生成绩按照从高到低进行排序 4再输入一个学生的成绩将此成绩按照排序规律插入原学生成绩数组 5将排好序的成绩单进行反序存放即原来是从高到低现在改为从低到高排列 ... -
vb 让excel排序_Excel新增公式 - 好用到爆
2020-12-11 14:55:21先看看图表效果:显而易见前后5名的差距,数据也是从高到低进行排列,而且如果数据有变化,图表也会跟着排名情况自动更新,现在图表基本都不会是静态图了,都是做好模板之后直接更新结果自动刷新。当然,数据透视表... -
数据结构电视大赛投票系统
2018-02-03 11:59:37问题描述:在很多的电视大赛中,通常当选手表演结束后,现场观众通过手中的按键对参赛选手进行投票,然后对选手获得的票数进行统计,从高到低进行降序排序,从而自动产生冠军、亚军和季军。要求编写算法模拟实现上述... -
大一c语言的课程设计题目 有点小复杂 急急!
2016-05-31 05:00:12(3) 在函数中进行全班学生成绩从高到低排名, 排名方式根据函数的style参数进行,如style为‘a'按升序排序,style为 ' d ' 按降序排序。 (4) 用指针优化学生成绩排名。用指针实现数组的输入输出以及数组的排序... -
C语言程序 学生成绩排序系统
2016-05-31 15:55:39(3)在函数中进行 全班学生成绩从高到低的顺序进行排名, 排名方式根据上方一排好的顺序。 (4)对学生的成绩进行优化。 若遇到成绩相同的同学,按照学号的大小进行重新排序。 (5)定义一个结构体数组,存放学生的... -
Ranking
2020-08-23 21:50:07有n个考场,每个考场有若干数量的考生,现在给出各个考场中考生的准考证号与分数,要求将所有考生按分数从高到低排序,并按顺序输出所有考生的准考证号、排名、考场号以及考场内排名 思路 在结构体Student中存放题目...