查究成分习题集,找寻总分最高的学员
分类:计算机编程

给定N个学生的主导新闻,包含学号(由5个数字构成的字符串卡塔 尔(阿拉伯语:قطر‎、姓名(长度小于10的不富含空白字符的非空字符串卡塔尔国和3门课程的成就([0,100]间隔内的莫西干发型卡塔 尔(阿拉伯语:قطر‎,须要输出总分最高学子的全名、学号和总分。

本文为本人对PAT-B的简要深入分析,尽恐怕用易于精晓的点子与简单的代码,究竟是那是算法测验实际不是语法难度比拼。

PAT/查找成分习题集,pat成分习题集

B1004. 大成排名 (20)

Description:

读入n名学子的真名、学号、成绩,分别出口战绩最高和实际业绩最低学子的姓名和学号。

Input:

各样测量试验输入包涵1个测验用例,格式为:

第1行:正整数n
  第2行:第1个学生的姓名 学号 成绩
  第3行:第2个学生的姓名 学号 成绩
  ... ... ...
  第n 1行:第n个学生的姓名 学号 成绩

此中姓名和学号均为不当先十三个字符的字符串,战表为0到100时期的四个卡尺头,这里有限支撑在黄金时代组测量试验用例中并未有三个学子的战表是如出豆蔻梢头辙的。

Output:

对各样测量试验用例输出2行,第1行是培养最高学生的姓名和学号,第2行是战表最低学子的全名和学号,字符串间有1空格。

Sample Input:

3
Joe Math990112 89
Mike CS991301 100
Mary EE990830 95

Sample Output:

Mike CS991301
Joe Math990112

 1 #include <cstdio>
 2 
 3 struct Student{
 4     char name[15];
 5     char id[15];
 6     int score;
 7 }temp, ans_max, ans_min;
 8 
 9 int main()
10 {
11     int n;
12     scanf("%d", &n);
13     ans_max.score = -1;
14     ans_min.score = 101;
15     for(int i=0; i<n;   i) {
16         scanf("%s%s%d", temp.name, temp.id, &temp.score);
17         if(temp.score > ans_max.score)  ans_max = temp;
18         if(temp.score < ans_min.score)  ans_min = temp;
19     }
20 
21     printf("%s %sn%s %sn", ans_max.name, ans_max.id, ans_min.name, ans_min.id);
22 
23     return 0;
24 }

 

B1028. 总人口普遍检查 (20)

Description:

某城镇进行人口普遍检查,获得了百分百市民的华诞。现请你写个程序,搜索镇上最年长和最年轻的人。

那边确认保证每个输入的日期都以官方的,但不明显是客观的——借使已知镇上未有超越200岁的父老,而明日是二零一六年十二月6日,所以当先200岁的寿辰和未名落孙山的出生之日都是不客观的,应该被过滤掉。

Input:

输入在率先行提交正整数N,取值在(0, 105];随后N行,每行给出1个人的全名(由不超越5个土耳其语字母组成的字符串卡塔 尔(英语:State of Qatar)、甚至按“yyyy/mm/dd”(即年/月/日卡塔尔格式给出的生辰。题目保险最年长和最年轻的人未有同等对待。

Output:

留意气风发行中逐豆蔻梢头输出有效生辰的个数、最年长人和最年轻人的真名,其间以空格分隔。

Sample Input:

5
John 2001/05/12
Tom 1814/09/06
Ann 2121/01/30
James 1814/09/05
Steve 1967/11/20

Sample Output:

3 Tom John

 1 #include <cstdio>
 2 #include <cstring>
 3 
 4 #define MaxSize 11
 5 struct birthday {
 6     char name[MaxSize];
 7     char date[MaxSize];
 8 }temp, maxn, minn;
 9 char floor[MaxSize] = "1814/09/06", upper[MaxSize] = "2014/09/06";
10 
11 int main()
12 {
13     //freopen("E:\Temp\input.txt", "r", stdin);
14 
15     for(int i=0; i<MaxSize;   i) {
16         maxn.date[i] = floor[i];
17         minn.date[i] = upper[i];
18     }
19     int N;
20     scanf("%d", &N);
21     int counter = N;
22     for(int i=0; i<N;   i) {
23         scanf("%s %s", temp.name, temp.date);
24         if(strcmp(temp.date, floor)<0 || strcmp(temp.date, upper)>0)
25             --counter;
26         else {
27             if(strcmp(temp.date, maxn.date) >= 0)   maxn = temp;
28             if(strcmp(temp.date, minn.date) <= 0)   minn = temp;
29         }
30     }
31 
32     if(counter != 0)
33         printf("%d %s %sn", counter, minn.name, maxn.name);
34     else
35         printf("0n");
36 
37     return 0;
38 }

 1 #include <cstdio>
 2 
 3 struct person {
 4     char name[10];
 5     int yy, mm, dd;
 6 }oldest, youngest, left, right, temp;
 7 
 8 bool LessEqu(person a, person b)
 9 {
10     if(a.yy != b. yy)   return a.yy <= b.yy;
11     else if(a.mm != b.mm)   return a.mm <= b.mm;
12     else return a.dd <= b.dd;
13 }
14 bool MoreEqu(person a, person b)
15 {
16     if(a.yy != b. yy)   return a.yy >= b.yy;
17     else if(a.mm != b.mm)   return a.mm >= b.mm;
18     else return a.dd >= b.dd;
19 }
20 void init()
21 {
22     youngest.yy = left.yy = 1814;
23     oldest.yy = right.yy = 2014;
24     youngest.mm = oldest.mm = left.mm = right.mm = 9;
25     youngest.dd = oldest.dd = left.dd = right.dd = 6;
26 }
27 
28 int main()
29 {
30     init();
31     int n, num = 0;
32     scanf("%d", &n);
33     for(int i=0; i<n;   i) {
34         scanf("%s %d/%d/%d", temp.name, &temp.yy, &temp.mm, &temp.dd);
35         if(MoreEqu(temp, left) && LessEqu(temp, right)) {
36             num  ;
37             if(LessEqu(temp, oldest))  oldest = temp;
38             if(MoreEqu(temp, youngest)) youngest = temp;
39         }
40     }
41 
42     if(num == 0)    printf("0n");
43     else printf("%d %s %sn", num, oldest.name, youngest.name);
44 
45     return 0;
46 }

 

B1032. 推土机工夫哪家强 (20)

Description:

为了用实际表达发现机技巧到底哪家强,PAT组织了一场开采机手艺大赛。现请你依照比赛结果总结动手艺最强的老大学校。

Input:

输入在第1行提交不当先105的正整数N,即参Gaby赛人数。随后N行,每行给出壹沙参Gaby赛者的消息和成绩,包蕴其所表示的学府的数码(从1发端三番两回编号卡塔尔、及其比赛战绩(百分制卡塔 尔(阿拉伯语:قطر‎,中间以空格分隔。

Output:

在后生可畏行中提交总得分最高的母校的号子、及其总分,中间以空格分隔。标题保障答案唯大器晚成,未有仁同一视。

Sample Input:

6
3 65
2 80
1 100
2 70
3 40
3 0

Sample Output:

2 150

 1 #include <cstdio>
 2 
 3 const int maxn = 100010;
 4 int school[maxn];
 5 
 6 int main()
 7 {
 8     int n, schID, score;
 9     scanf("%d", &n);
10     for(int i=0; i<n;   i) {
11         scanf("%d%d", &schID, &score);
12         school[schID]  = score;
13     }
14 
15     int k = 1, MAX = -1;
16     for(int i=1; i<=n;   i) {
17         if(school[i] > MAX) {
18             MAX = school[i];
19             k = i;
20         }
21     }
22 
23     printf("%d %dn", k, MAX);
24 
25     return 0;
26 }

 

A1011. World Cup Betting (20)

Description:

With the 2010 FIFA World Cup running, football fans the world over were becoming increasingly excited as the best players from the best teams doing battles for the World Cup trophy in South Africa. Similarly, football betting fans were putting their money where their mouths were, by laying all manner of World Cup bets.

Chinese Football Lottery provided a "Triple Winning" game. The rule of winning was simple: first select any three of the games. Then for each selected game, bet on one of the three possible results -- namely W for win, T for tie, and L for lose. There was an odd assigned to each result. The winner's odd would be the product of the three odds times 65%.

For example, 3 games' odds are given as the following:

 W    T    L
1.1  2.5  1.7
1.2  3.0  1.6
4.1  1.2  1.1

To obtain the maximum profit, one must buy W for the 3rd game, T for the 2nd game, and T for the 1st game. If each bet takes 2 yuans, then the maximum profit would be (4.1*3.0*2.5*65%-1)*2 = 37.98 yuans (accurate up to 2 decimal places).

Input:

Each input file contains one test case. Each case contains the betting information of 3 games. Each game occupies a line with three distinct odds corresponding to W, T and L.

Output:

For each test case, print in one line the best bet of each game, and the maximum profit accurate up to 2 decimal places. The characters and the number must be separated by one space.

Sample Input:

1.1 2.5 1.7
1.2 3.0 1.6
4.1 1.2 1.1

Sample Output:

T T W 37.98

 1 #include <cstdio>
 2 
 3 char S[3] = {'W', 'T', 'L'};
 4 
 5 int main()
 6 {
 7     double ans = 1, temp, a;
 8     int idx;
 9     for(int i=0; i<3;   i) {
10         temp = 0;
11         for(int j=0; j<3;   j) {
12             scanf("%lf", &a);
13             if(a > temp) {
14                 temp = a;
15                 idx = j;
16             }
17         }
18         ans *= temp;
19         printf("%c ", S[idx]);
20     }
21 
22     printf("%.2fn", (ans*0.65-1)*2);
23 
24     return 0;
25 }

 

B1004. 成绩排名(20) Description: 读入n名学子的人名、学号、成绩,分别出口成绩最高和成绩最低学生的姓...

输入格式:

输入在黄金年代行中付出正整数N(≤10卡塔 尔(阿拉伯语:قطر‎。随后N行,每行给出壹位学子的音信,格式为“学号 姓名 战绩1 大成2 大成3”,中间以空格分隔。

1001.害死人不偿命的(3n 1)估计 (15)

出口格式:

在风流倜傥行中输出总分最高学子的真名、学号和总分,间隔叁个空格。标题保证那样的学子是唯风华正茂的。

卡拉兹(Callatz)猜想:
对别的四个当然数n,假如它是偶数,那么把它砍掉四分之二;假若它是奇数,那么把(3n 1)砍掉八分之四。这样一直每每拿下去,最终一定在某一步得到n=1。卡拉兹在一九四三年的世界化学家大会上发布了这一个揣测,故事那个时候伊利诺伊香槟分校大学师生齐动员,拼命想申明这几个貌似很傻很天真的命题,结果闹得同学们无心学业,一心只证(3n 1),以至于有些人会讲这是一个阴谋,卡拉兹是在有意识延缓美利哥数学界教学与应用研究的进展……

输入样例:

5
00001 huanglan 78 83 75
00002 wanghai 76 80 77
00003 shenqiang 87 83 76
10001 zhangfeng 92 88 78
21987 zhangmeng 80 82 75

咱俩几日前的主题材料不是验证卡拉兹预计,而是对给定的任一不超过1000的正整数n,轻巧地数一下,必要多少步(砍几下卡塔 尔(阿拉伯语:قطر‎能力获得n=1?

出口样例:

zhangfeng 10001 258

 

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 
 4 typedef struct _info {
 5     char number[6];
 6     char name[11];
 7     int score[3];
 8 } Info;
 9 
10 int main(int argc, char const *argv[])
11 {
12     int n;
13     Info *p = NULL;
14 
15     scanf("%d", &n);
16 
17     p = (Info*)malloc(sizeof(Info)*n);
18 
19     for ( int i = 0; i < n; i   ) {
20         scanf("%s %s %d %d %d", 
21             p[i].number, p[i].name, &p[i].score[0], &p[i].score[1], &p[i].score[2]);
22     }
23     int maxid = 0;
24     for ( int i = 1; i < n; i   ) {
25         int sum1, sum2;
26         sum1 = p[i].score[0]   p[i].score[1]   p[i].score[2];
27         sum2 = p[maxid].score[0]   p[maxid].score[1]   p[maxid].score[2];
28         if ( sum1 > sum2 ) {
29             maxid = i;
30         }
31     }
32     int sum = p[maxid].score[0]   p[maxid].score[1]   p[maxid].score[2];
33     printf("%s %s %dn", p[maxid].name, p[maxid].number, sum);
34     free(p);
35     return 0;
36 }

 

输入格式:各类测验输入包蕴1个测验用例,即给出自然数n的值。

出口格式:输出从n总结到1亟待的步数。

//用递归的方法
#include <iostream>

using namespace std;

void Callatz(int n,int i){
  if(n==1){
   cout<<i;
  }
  else if(n%2==0){
    i  ;
    n=n/2;
    Callatz(n,i);
  }
  else{
    i  ;
    n=(3*n 1)/2;
    Callatz(n,i);
  }
}

int main(){
  int n,i=0;
  cin>>n;
  Callatz(n,i);
  return 0;
}

1002.写出这些数 (20)

读入叁个本来数n,总括其各位数字之和,用中文拼音写出和的每一位数字。

输入格式:每一种测验输入满含1个测量试验用例,即给出自然数n的值。这里保险n小于 10^100。
输出格式:在风流罗曼蒂克行内输出n的诸位数字之和的每一位,拼音数字间有1 空格,但风流倜傥行中最终叁个拼音数字后尚未空格。

输入样例:
1234567890987654321123456789
出口样例:
yi san wu

#include <iostream>
#include <string.h>

using namespace std;

void print(int n){
    const char *num[] = { "ling", "yi", "er", "san", "si", "wu", "liu", "qi", "ba", "jiu"};
    if(n/10!=0) {
        print(n/10);
        cout<<" "<<num[n];
    }else{
        cout<<num[n];
    }
}

int main() {
    char str[101];
    cin>>str;
    int i,sum = 0;
    for (i = 0; i < (int)strlen(str); i  ) {
        if (str[i]>='0' && str[i]<='9') {
            sum  = str[i] - '0';
        }else{
            break;
        }
    }
    if (i==(int)strlen(str)) {
        print(sum);
    }else{
        return 0;
    }
    return 0;
}

1003.本人要经过!(20)
“答案正确”是电动判题系统提交的最令人赏识的回复。本题归于PAT的“答案准确”大派送 —— 只要读入的字符串知足下列条件,系统就输出“答案准确”,不然输出“答案错误”。

收获“答案精确”的标准是:

  1. 字符串中必得唯有P, A, T这两种字符,无法分包其余字符;
  2. 任性形如 xPATx 的字符串都足以获得“答案正确”,在这之中 x 或然是空字符串,只怕是仅由字母 A 组成的字符串;
  3. 设若 aPbTc 是科学的,那么 aPbATca 也是科学的,当中 a, b, c 均可能是空字符串,也许是仅由字母 A 组成的字符串。

现行反革命就请您为PAT写八个电动裁判程序,决断哪些字符串是足以拿走“答案精确”的。
输入格式: 各样测量试验输入包罗1个测量试验用例。第1行提交一个自然数n (<10),是内需检查评定的字符串个数。接下来各样字符串占生龙活虎行,字符串长度不超过100,且不包罗空格。

输出格式:种种字符串的检查测量试验结果占生龙活虎行,假如该字符串能够收获“答案精确”,则输出YES,不然输出NO。

输入样例:
8
PAT
PAAT
AAPATAA
AAPAATAAAA
xPATx
PT
Whatever
APAAATAA
出口样例:
YES
YES
YES
YES
NO
NO
NO
NO

那大器晚成题对此标题条件的了解很有难度,即第三条是确立于第二条的加大,要综合出满足2、3原则的算式。
综述多个典型化得:
1.字符串唯有pat那三种字符
2.p、t各独有二个
3.p的岗位在t前
4.p前a个数乘pt间a个数 等于 t后a个数
于是只须要对pat计数并切记地点就能够。

#include <iostream>
#include<string.h>

using namespace std;

int main(){
    int n,len;//字符串个数与临时长度
    int p,a,t,p_pos,t_pos;//p、a、t分别为计数,p_pos与t_pos是p、t的位置(pt只能有一个)
    char str[100];
    cin>>n;
    while(n--){//运行n次,即读取n个字符串
        cin>>str;
        p = a = t = p_pos = t_pos = 0;//对每一个字符串初始化
        len = strlen(str);
        for(int i = 0;i < len;i  ){
            if(str[i] == 'P'){
                p  ;
                p_pos = i;
            }
            else if(str[i] == 'A'){
                a  ;
            }
            else if(str[i] == 'T'){
                t  ;
                t_pos = i;
            }
        }
        if(p a t != len || p > 1 || t > 1 || p_pos >= t_pos - 1 || p_pos * (t_pos - p_pos - 1) != len - t_pos - 1)
            cout<<"NOn";
            //输出no的情况:
            //1.字符串并非全是pat这三个字符
            //2.p、t任一个多于一个
            //3.p的位置在t后
            //4.p前a个数乘pt间a个数 不等于 t后a个数
        else cout<<"YESn";//满足所有条件即为yes
    }
    return 0;
}

1004.成就排行 (20)

读入n名学生的姓名、学号、成绩,分别出口战表最高和成绩最低学子的全名和学号。

输入格式:各个测量试验输入满含1个测量检验用例,格式为

第1行:正整数n
第2行:第二个学生的姓名 学号 成绩
第3行:第3个学子的人名 学号 战表
... ... ...
第n 1行:第n个学子的真名 学号 成绩
里头姓名和学号均为不抢先13个字符的字符串,战绩为0到100之内的二个莫西干发型,这里保险在生机勃勃组测量检验用例中绝非七个学子的成正是千篇风姿浪漫律的。
出口格式:对各种测验用例输出2行,第1行是成绩最高学子的人名和学号,第2行是成就最低学子的姓名和学号,字符串间有1空格。

输入样例:
3
Joe Math990112 89
Mike CS991301 100
Mary EE990830 95
输出样例:
Mike CS991301
Joe Math990112

#include <iostream>

using namespace std;

struct student{
    char name[11];
    char num[11];
    int grade;
};

int main(){
    int n,i;//学生个数
    cin>>n;
    student stu[n];
    student smin={"","",101};//最大设为101比较好,也可以大于101
    student smax={"","",-1};//最小为-1,0的话学生成绩也可能是0就存不进去了

    for(i=0;i<n;i  ){//边读边判断,分开的话会判错,不知道为什么
        cin>>stu[i].name>>stu[i].num>>stu[i].grade;
        if(stu[i].grade>smax.grade){
            smax=stu[i];
        }
        if(stu[i].grade<smin.grade){
            smin=stu[i];
        }
    }

    cout<<smax.name<<" "<<smax.num<<endl;
    cout<<smin.name<<" "<<smin.num;

    return 0;
}

1006.换个格式输出整数 (15)

让大家用字母B来表示“百”、字母S表示“十”,用“12...n”来表示个位数字n(<10卡塔 尔(英语:State of Qatar),换个格式来输出任四个不当先3位的正整数。比方234应该被输出为BBSSS1234,因为它有2个“百”、3个“十”、以致个位的4。

输入格式:每一种测量试验输入包罗1个测量试验用例,给出正整数n(<1000卡塔尔。

出口格式:每一种测量试验用例的出口占意气风发行,用规定的格式输出n。

输入样例1:
234
输出样例1:
BBSSS1234
输入样例2:
23
出口样例2:
SS123

精品简单的豆蔻梢头道题。。。既然不超过四人数那么分别按位输出一下就行

#include <iostream>
using namespace std;

void print(int n){
  int i;
  for(i=0;i<(n/100);i  ){
    cout<<"B";
  }
  for(i=0;i<(n/10);i  ){
    cout<<"S";
  }
  for(i=1;i<=n;i  ){
    cout<<i;
  }
}

int main()
{
  int n;
    cin>>n;
  print(n);
}

本文由pc28.am发布于计算机编程,转载请注明出处:查究成分习题集,找寻总分最高的学员

上一篇:爬虫学习笔记 下一篇:没有了
猜你喜欢
热门排行
精彩图文