• 蓝桥杯 使用sort排序(c++)


    在这里插入图片描述

    sort是一个C++已经为我们实现好的工具,当我们要用它时,需要先引入一个算法的库—— < algorithm >。需要说明的是,sort可以排序任何类型的元素,包括我们自己定义的结构体
    我们将需要在C++文件的开始位置加上:

    #include 
    
    • 1

    对于下面这段程序

    #include
    #include
    using namespace std;
    int main(){
    	int arr[]={2,4,5,3,1};
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    通过写

    sort(arr,arr+5);
    
    • 1

    我们可以将arr中从开始的元素到第5个元素按从小到大的顺序排列。
    而如果我们写:

    sort(arr+i,arr+j);
    
    • 1

    那么被排序的将是arr[i]到arr[j-1],其他元素将保持原位置。

    如果希望arr中的元素从大到小排列(或按照某一个规则进行排列),我们可以再为sort传入第三个参数——“排序方法”:

    sort(arr,arr+5,greater<int>());
    
    • 1

    其中,greater表示“更大”的意思,表示待排序的数组中的元素类型为int,整个这行代码表示让一个元素类型为整数的数组从大到小排序。
    我们的程序会变为:

    #include
    #include
    using namespace std;
    int main(){
    	int arr[]={2,4,5,3,1};
    	sort(arr,arr+5,greater<int>());
    	return 0;
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    在这里,我们可以看到,我们的程序声明了一个长
    度为10的整数型数组,并通过循环从输入中读入10个整数。
    接下来因为我们希望使用排序sort,所以请
    用#include将< algorithm >库引入:
    1 #include < algorithm >
    请注意,我们习惯性地将所有引入操作放在程序最开始。在这里,你可以将< algorithm >在引入< iostream >之后一行引入。

    #include 
    #include 
    using namespace std;
    int main(){
    	int arr[10];
    	for(int i=0;i<10;i++){
    		cin>>arr[i];
    	}
    	sort(arr,arr+10);
    	for(int i=0;i<10;i++){
    		cout<<arr[i]<<" ";
    	}
    	cout<<endl;
    	sort(arr,arr+10,greater<int>());
    	for(int i=0;i<10;i++){
    		cout<<arr[i]<<" ";
    	}
    	cout<<endl;
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    在这里插入图片描述

    算出班上信息学成绩前K名的平均成绩。

    编入格式
    输入共有三行:
    第一行:所在班级的人数N(其中1 ≤ N ≤ 30) ;
    第二行:为N个用1个空格隔开的信息学分数(其中分数为700及以内正整数) ;
    第三行:老师想计算平均数的尖子生人数K。
    输出格式
    输出一行共一个实数,为信息学分数前K名同学的分数平均数。四舍五入保留两位小数。
    样例输入

    10
    93 85 77 68 59 100 43 94 75 82
    4
    
    • 1
    • 2
    • 3

    样例输出

    93.00
    
    • 1
    #include 
    #include 
    using namespace std;
    int score[35];
    int main(){
    	int N,k,sum;
    	scanf("%d",&N);
    	for(int i=0;i<N;i++){
    		scanf("%d",&score[i]);
    	}
    	scanf("%d",&k);
    	sort(score,score+N,greater<int>());
    	sum=0;
    	for(int i=0;i<k;i++){
    		sum+=score[i];
    	}
    	printf("%.2f\n",1.0*sum/k);
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    在这里插入图片描述
    小红所在的班级进行了数学考试,老师请小红同学帮忙进行名次排序和各分数段的人数统计工作。
    现要求如下:将N名同学的考试成绩放在A数组中,各分数段的人数存到数组中:成绩为100的人数存到B[1]中,成绩为90到99的人数存
    到B[2]中,成绩为80到89的人数存到B[3]中,成绩为70到79的人数存到B[4]中,成绩为60到69的人数存到B[5]中,成绩为60分以
    下的人数存到B[6]中。
    输入格式
    输入共有两行:
    第一行:为小红所在班级的人数N(其中1 <= N <=30) ;
    ·第二行:为N个用1个空格隔开的数学分数(其中分数为100及以内正整数)。
    输出格式
    输出共有若干行:
    前N行:每行一个整数是从高到低排序的数学分数 ;
    最后一行:是6个按要求,存放到数组B[1]到B[6]中各分数段的人数(各数据之间以1个业格为间隔)。
    样例输入

    10
    93 85 77 68 59 100 43 94 75 82
    
    • 1
    • 2

    样例输出

    100
    94
    93
    85
    82
    77
    75
    68
    59
    43
    1 2 2 2 1 2
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    #include 
    #include 
    using namespace std;
    int score[35];
    int B[7];
    int main(){
    	int N;
    	scanf("%d",&N);
    	for(int i=0;i<N;i++){
    		scanf("%d",&score[i]);
    	}
    	sort(score,score+N,greater<int>());
    	for(int i=0;i<N;i++){
    		printf("%d\n",score[i]);
    	}
    	for(int i=0;i<N;i++){
    		if(score[i]==100){
    			B[1]++;
    		}else if(score[i]>=90){
    			B[2]++;
    		}else if(score[i]>=80){
    			B[3]++;
    		}else if(score[i]>=70){
    			B[4]++;
    		}else if(score[i]>=60){
    			B[5]++;
    		}else{
    			B[6]++;
    		}
    	}
    	for(int i=1;i<=6;i++){
    		if(i!=6){
    			printf("%d ",B[i]);
    		}else{
    			printf("%d\n",B[i]);
    		}
    	}
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
  • 相关阅读:
    2022年国赛nginx 加固题
    小程序的网络请求及封装api
    安卓将图片分割或者拉伸或者旋转到指定尺寸并保存到本地
    手绘二维码
    一场分销裂变活动,不止是发发朋友圈这么简单
    SpringBoot开发实用篇复习1
    JetPack--Navigation实现页面跳转
    网络编程day04(网络属性函数、广播、组播、TCP并发)
    在一个递增有序的线性表中,有数值相同的元素存在。若存储方式为单链表,设计算法去掉数值相同的元素。
    论文字体,Word字体大小对照换算表(字号、磅、英寸、像素)
  • 原文地址:https://blog.csdn.net/weixin_74774974/article/details/133714623