查找成分习题集,找出总分最高的学习者

By admin in 4858.com on 2019年3月30日

给定N个学生的中坚音信,包涵学号(由多少个数字组成的字符串)、姓名(长度小于10的不含有空白字符的非空字符串)和3门课程的实际业绩([0,100]间隔内的平头),须求输出总分最高学生的姓名、学号和总分。

给定N个学生的着力信息,包涵学号(由多少个数字组成的字符串)、姓名(长度小于10的不含有空白字符的非空字符串)和3门课程的实际业绩([0,100]间隔内的平头),要求输出总分最高学生的姓名、学号和总分。

正文为本人对PAT-B的简要分析,尽或者用易于驾驭的点子与简单的代码,终究是那是算法测试而不是语法难度比拼。

PAT/查找元素习题集,pat元素习题集

B1004. 大成排名 (20)

查找成分习题集,找出总分最高的学习者。Description:

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

Input:

各类测试输入包蕴1个测试用例,格式为:

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

个中姓名和学号均为不超越12个字符的字符串,成绩为0到100时期的贰个整数,这里保险在一组测试用例中并未八个学生的战绩是如出一辙的。

Output:

对每一个测试用例输出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 %s\n%s %s\n", ans_max.name, ans_max.id, ans_min.name, ans_min.id);
22 
23     return 0;
24 }

 

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

Description:

某乡镇拓展人口普遍检查,获得了上上下下居民的常德。现请你写个程序,找出镇上最年长和最年轻的人。

那边确认保障每个输入的日期都是官方的,但不肯定是意料之中的——倘使已知镇上没有超过200岁的老前辈,最近天是二零一四年七月13日,所以超越200岁的生辰和未出生的寿辰都是不创制的,应该被过滤掉。

Input:

输入在首先行提交正整数N,取值在(0,
105];随后N行,每行给出一位的姓名(由不抢先5个英文字母组成的字符串)、以及按“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 %s\n", counter, minn.name, maxn.name);
34     else
35         printf("0\n");
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("0\n");
43     else printf("%d %s %s\n", num, oldest.name, youngest.name);
44 
45     return 0;
46 }

 

B1032. 推土机技术哪家强 (20)

Description:

为了用实际证实挖掘机技术到底哪家强,PAT组织了一场挖掘机技能大赛。现请你遵照比赛结果计算出技术最强的十一分高校。

Input:

输入在第三行提交不超过105的正整数N,即参加比赛人数。随后N行,每行给出1个沙参加比赛者的消息和实际业绩,包罗其所代表的学院和学校的号子(从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 %d\n", 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("%.2f\n", (ans*0.65-1)*2);
23 
24     return 0;
25 }

 

B1004. 成绩排行(20) Description:
读入n名学生的真名、学号、成绩,分别出口成绩最高和实际业绩最低学生的姓…

输入格式:

输入在一行中付出正整数N(≤10)。随后N行,每行给出1人学生的音讯,格式为“学号
姓名 战表1 成就2 成就3”,中间以空格分隔。

输入格式:

输入在一行中提交正整数N(≤10)。随后N行,每行给出一位学员的消息,格式为“学号
姓名 成绩1 成就2 成就3”,中间以空格分隔。

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

出口格式:

在一行中输出总分最高学生的全名、学号和总分,间隔1个空格。标题保障这样的学习者是绝无仅有的。

出口格式:

在一行中输出总分最高学生的全名、学号和总分,间隔三个空格。标题保险那样的学习者是绝无仅有的。

卡拉兹(Callatz)猜想:
对别的一个本来数n,假使它是偶数,那么把它砍掉一半;尽管它是奇数,那么把(3n+1)砍掉八分之四。那样直白反复拿下去,最终一定在某一步得到n=1。卡拉兹在1949年的社会风气地工学家大会上公布了这一个测度,轶闻当时浦项科技高校师生齐动员,拼命想评释那些一般很傻很天真的命题,结果闹得学生们无心学业,一心只证(3n+1),以至于有人说那是3个阴谋,卡拉兹是在故意延缓United States数学界教学与科研的展开……

输入样例:

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

输入样例:

500001 huanglan 78 83 7500002 wanghai 76 80 7700003 shenqiang 87 83 7610001 zhangfeng 92 88 7821987 zhangmeng 80 82 75

小编们前天的标题不是印证卡拉兹估摸,而是对给定的任一不超过一千的正整数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 %d\n", p[maxid].name, p[maxid].number, sum);
34     free(p);
35     return 0;
36 }

 

出口样例:

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 = malloc(sizeof*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 %d\n", p[maxid].name, p[maxid].number, sum);34     free;35     return 0;36 }

输入格式:每种测试输入包罗3个测试用例,即给出自然数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,总结其各位数字之和,用汉语拼音写出和的每种人数字。

输入格式:各种测试输入包蕴贰个测试用例,即给出自然数n的值。那里保障n小于
10^100。
输出格式:在一行内输出n的各位数字之和的每1个人,拼音数字间有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%10];
    }else{
        cout<<num[n%10];
    }
}

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写三个活动评判程序,判定哪些字符串是足以拿走“答案正确”的。
输入格式: 每一种测试输入包括3个测试用例。第③行提交一个自然数n
(<10),是索要检查和测试的字符串个数。接下来各样字符串占一行,字符串长度不超过100,且不带有空格。

出口格式:每一种字符串的检查和测试结果占一行,假如该字符串能够收获“答案正确”,则输出YES,不然输出NO。

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

这一题对此题目条件的驾驭很有难度,即第二条是创制于第壹条的拓宽,要综合出满意二 、3规范的算式。
综述八个标准化得:
1.字符串仅有pat那两种字符
2.p、t各唯有3个
3.p的地点在t前
4.p前a个数乘pt间a个数 等于 t后a个数
故此只必要对p\a\t计数并记住地点即可。

#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<<"NO\n";
            //输出no的情况:
            //1.字符串并非全是pat这三个字符
            //2.p、t任一个多于一个
            //3.p的位置在t后
            //4.p前a个数乘pt间a个数 不等于 t后a个数
        else cout<<"YES\n";//满足所有条件即为yes
    }
    return 0;
}

1004.战绩排行 (20)

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

输入格式:每种测试输入包罗三个测试用例,格式为

第1行:正整数n
第3行:第3个学生的人名 学号 战表
第叁行:第三个学生的全名 学号 战表
… … …
第n+1行:第n个学生的真名 学号 成绩
其间姓名和学号均为不超越13个字符的字符串,战绩为0到100里边的一个平头,那里保险在一组测试用例中绝非七个学生的大成是同一的。
出口格式:对各样测试用例输出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),换个格式来输出任多少个不超越4人的正整数。例如234相应被输出为BBSSS1234,因为它有1个“百”、一个“十”、以及个位的4。

4858.com ,输入格式:种种测试输入包蕴三个测试用例,给出正整数n(<一千)。

输出格式:每种测试用例的出口占一行,用规定的格式输出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)%10;i++){
    cout<<"B";
  }
  for(i=0;i<(n/10)%10;i++){
    cout<<"S";
  }
  for(i=1;i<=n%10;i++){
    cout<<i;
  }
}

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

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图
Copyright @ 2010-2019 美高梅手机版4858 版权所有