第二行包含按学号顺序给定n个学生的成绩,分别

作者: 编程  发布:2019-12-28

9159.com 1

新学C语言属实没思路求大神帮帮职责描述考试后,得到了考试战表数据,依据大于等于60分成及格的正经,大家须求领会哪些学子从未过关。输入首先行包罗贰个大背头k,表示采撷到k场考试的成绩。对于每场考试的多寡包罗2行。个中,第豆蔻梢头行包含二个莫西干发型n,表示某次考试的有n个学子。第二行李包裹蕴按学号顺序给定n个学子的大成,战绩的取值范围为[0,100],学号从1号先河挨家挨户编号。输出每场考试的结果输出占生龙活虎行。对于每场考试,根据学号顺序从小到金朝序,输出未有过关的学员学号。多少个学号之间用空格分隔。若无学子挂科,则输出”allpassed”。输入比如338059614607060801090468059406773207158出口比如2allpassed245810

选料排序

输入第一行是二个整数n,代表接下去会有n组数据,每组数据对应大器晚成三个学子。每组数据占意气风发-行,包罗贰个整数和三个实数。分别为学子的学号(M卡塔尔(قطر‎与综合评测成绩(S卡塔尔(قطر‎,以空格分隔。(1000M2002,1S100卡塔尔国输出共包蕴生龙活虎行,富含多少个整数,分别为,成为综合评测成绩排在前五的学习者的学号,种种学员的学号之间以空格分隔,当现身存绩相通时,按学号以升序实行排行男女已经不行了

1.着力思索:每后生可畏趟从待排序的数额成分选出最小或最大的八个因素,数按序排泄在待排序的要素的最前端,直到全体待排序的成分排完

9159.com,2.骨干代码

px(int r[])
{
    for(int i=1;i<n;i++)
       {
           int k=i;
           for(int j=i+1;j<=n;j++)
              {
                 if(a[k]>a[j]
                     K=J;
                }
            if(k!=i)
              {
                    int tmp=a[i];
                    a[i]=a[k];
                    a[k]=a[i];
                }
           }
}

3.例题

什么人考了第k名

总时限: 
1000ms

内存约束: 
65536kB

描述
在叁次考试中,每种学子的大曼海姆不形似,现知道了每一种学员的学号和成绩,求考第k名学员的学号和实际业绩。

输入
第生龙活虎行有四个整数,分别是学员的食指n(1≤n≤100),和求第k名学员的k(1≤k≤n)。
自此有n行数据,每行包含一个学号(整数)和叁个战表(浮点数),中间用叁个空格分隔。

输出
输出第k名学员的学号和成绩,中间用空格分隔。(注:请用%g输出战表)

样例输入
5 3 90788001 67.8 90788002 90.3 90788003 61 90788004 68.4 90788005 73.9

样例输出
90788004 68.4

#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
int n,k,a[101];
float b[101];
int main()
{
    scanf("%d%d",&n,&k);
    for(int i=1;i<=n;i++)
     {
         cin>>a[i];
         cin>>b[i];
     }
     for(int i=1;i<n;i++)
     {
         for(int j=i+1;j<=n;j++)
         {
             if(b[i]<b[j])
             {
                 float tmp=b[i];
                 b[i]=b[j];
                 b[j]=tmp;
                 int amp=a[i];
                 a[i]=a[j];
                 a[j]=amp;
             }
         }
     }
     for(int i=1;i<=n;i++)
     {
         if(i==k)
         {
          cout<<a[i]<<" ";
         printf("%.6g",b[i]);
         }
     }
     return 0;
}

冒泡排序

1.中坚寻思:依次比较相邻的五个数,把大的放前边小的放前边。即先相比较第叁个和第贰个,在可比第1个和第两个。。。。。。直到相比完最终五个数,则小小的的数一定在终极面

2.焦点代码

    for(int i=1;i<n;i++)
       for(int j=1;j<=n-i;j++)
            {
                int tmp=a[j];
                a[j]=a[j+1];
                a[j+1]=tmp;
         } 

3.例题

02:奇数单增连串

总时间节制: 
1000ms

内部存款和储蓄器约束: 
65536kB

描述
给定三个长度为N(不抢先500)的正整数体系,请将中间的富有奇数抽出,并按升序输出。

输入
共2行:
第1行为 N;
第2行为 N 个正整数,其间用空格间距。

输出
增序输出的奇数体系,数据里面以逗号间距。数据保险最稀有多少个奇数。

样例输入
10 1 3 2 6 5 4 9 8 7 10

样例输出
1,3,5,7,9

#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
int n,l;
int a[501],b[501];
int main()
{
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
       {
           scanf("%d",&a[i]);
           if(a[i]%2!=0)
           {
               l++;
               b[l]=a[i];
            } 
       }
    for(int i=1;i<l;i++)
       for(int j=1;j<=l-i;j++)
            if(b[j]>b[j+1])
            {
                int tmp=b[j];
                b[j]=b[j+1];
                b[j+1]=tmp;
            } 
    for(int i=1;i<l;i++)
       printf("%d,",b[i]);
    printf("%d",b[l]);
    return 0;
 } 

构造体排序

有同学会说,不正是给构造体排序吗,这么些简单,那在此就不都在说了

例题

03:成绩排序

总时限: 
1000ms

内部存款和储蓄器约束: 
65536kB

描述
给出班里某门课程的成绩单,请你按成绩从高到低对阵表单排序输出,固然有相近分数则名字字典序小的在前。

输入
第风姿浪漫行事n (0 < n < 20卡塔尔国,表示班里的学习者数量;
接下去的n行,每行为每种学子的名字和她的成就, 中间用单个空格隔断。名字只含有字母且长度不抢先20,战绩为叁个不抢先100的非负整数。

输出
把成就单按分数从高到低的相继进行排序并出口,每行李包裹涵名字和分数两项,之间有一个空格。

样例输入
4 Kitty 80 Hanmeimei 90 Joey 92 Tim 28

样例输出
Joey 92 Hanmeimei 90 Kitty 80 Tim 28

#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
int n;
struct student
{
    int score;
    string name;
}a[21];
int score_comp(const student &a,const student &b)
{
    if(a.score>b.score) return 1;
    if(a.score<b.score) return 0;
    if(a.name<b.name) return 1;
    return 0;
}
int main()
{
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
    {
        cin>>a[i].name;
        cin>>a[i].score;
    }    
    sort(a+1,a+n+1,score_comp);
    for(int i=1;i<=n;i++)
     {
         cout<<a[i].name<<' ';
         cout<<a[i].score<<endl;
     }
     return 0;
}

桶排序

1.中坚寻思

若带排序的记录的第生龙活虎词在叁个举世瞩目标一定量范围内(整形)时,能够安插轻松个有序桶,每一种桶装入一个值(当然能够装入若干个值)

逐大器晚成输出各桶的值,将赢得贰个一直以来数列。

2.模板

例题:输入n个0到100时期的寸头,从小到大排序

#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
int n,k;
int b[501];
int main()
{
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
       {
           scanf("%d",&k);
           b[k]++;
       }
    for(int i=0;i<=100;i++)
      while(b[i]>0)
       {
           printf("%d ",i);
           b[i]--;
       }
    return 0;
 } 

3.例题

1076 排序

 

 时限: 1 s

 空间范围: 128000 KB

 题目品级 : 白金Silver

题解

 

 

 

主题材料陈说 Description

给出n和n个整数,希望你从小到大给她们排序

输入描述 Input Description

首先行三个正整数n

 

其次行n个用空格隔断的大背头

出口描述 Output Description

出口仅大器晚成行,从小到大出口n个用空格隔绝的板寸

样例输入 Sample Input

3

3 1 2

样例输出 Sample Output

1 2 3

数据范围及提醒 Data Size & Hint

1<=n<=100000

#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
int n,k;
int b[100001];
int main()
{
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
       {
           scanf("%d",&k);
           b[k]++;
       }
    for(int i=0;i<=100000;i++)
      while(b[i]>0)
       {
           printf("%d ",i);
           b[i]--;
       }
    return 0;
 } 

 

本文由9159.com发布于编程,转载请注明出处:第二行包含按学号顺序给定n个学生的成绩,分别

关键词: