澳门新萄京官方网站-www.8455.com-澳门新萄京赌场网址

澳门新萄京官方网站字符串管理习题集,pat模拟

2019-06-23 作者:www.8455.com   |   浏览(89)

B1001.害死人不偿命的(3n 1)猜想 (15)

PAT/简单模拟习题集(一),pat模拟习题集

B1001.害死人不偿命的(3n 1)猜想 (15)

Description:

卡拉兹(Callatz)猜想:

对任何一个自然数n,如果它是偶数,那么把它砍掉一半;如果它是奇数,那么把(3n 1)砍掉一半。这样一直反复砍下去,最后一定在某一步得到n=1。卡拉兹在1950年的世界数学家大会上公布了这个猜想,传说当时耶鲁大学师生齐动员,拼命想证明这个貌似很傻很天真的命题,结果闹得学生们无心学业,一心只证(3n 1),以至于有人说这是一个阴谋,卡拉兹是在蓄意延缓美国数学界教学与科研的进展……

我们今天的题目不是证明卡拉兹猜想,而是对给定的任一不超过1000的正整数n,简单地数一下,需要多少步(砍几下)才能得到n=1?

Input:

每个测试输入包含1个测试用例,即给出自然数n的值。

Output:

输出从n计算到1需要的步数。

Sample Input:

3

Sample Output:

5

 1 #include <cstdio>
 2 
 3 int main()
 4 {
 5     //freopen("E:\Temp\input.txt", "r", stdin);
 6 
 7     int n, step = 0;
 8     scanf("%d", &n);
 9 
10     while(n != 1) {
11         if(n%2 == 0) {
12             n /= 2;
13         } else {
14             n = (3*n 1)/2;
15         }
16         step  ;
17     }
18 
19     printf("%dn", step);
20 
21     return 0;
22 }

 

B1032. 挖掘机技术哪家强 (20)

Description:

为了用事实说明挖掘机技术到底哪家强,PAT组织了一场挖掘机技能大赛。现请你根据比赛结果统计出技术最强的那个学校。

Input:

输入在第1行给出不超过105的正整数N,即参赛人数。随后N行,每行给出一位参赛者的信息和成绩,包括其所代表的学校的编号(从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 #define MaxSize 100010
 4 
 5 int school[MaxSize];
 6 
 7 int main()
 8 {
 9     //freopen("E:\Temp\input.txt", "r", stdin);
10 
11     int n, schID, score;
12     scanf("%d", &n);
13     for(int i=0; i<n;   i) {
14         scanf("%d %d", &schID, &score);
15         school[schID]  = score;
16     }
17 
18     int ID, maxscore = -1;
19     for(int i=1; i<=n;   i) {
20         if(school[i] > maxscore) {
21             ID = i;
22             maxscore = school[i];
23         }
24     }
25 
26     printf("%d %dn", ID, maxscore);
27 }

 

B1011. A B和C (15)

Description:

给定区间[-231, 231]内的3个整数A、B和C,请判断A B是否大于C。

Input:

输入第1行给出正整数T(<=10),是测试用例的个数。随后给出T组测试用例,每组占一行,顺序给出A、B和C。整数间以空格分隔。

Output:

对每组测试用例,在一行中输出“Case #X: true”如果A B>C,否则输出“Case #X: false”,其中X是测试用例的编号(从1开始)。

Sample Input:

4
1 2 3
2 3 4
2147483647 0 2147483646
0 -2147483648 -2147483647

Sample Output:

Case #1: false
Case #2: true
Case #3: true
Case #4: false

 1 #include <cstdio>
 2 
 3 int main()
 4 {
 5     //freopen("E:\Temp\input.txt", "r", stdin);
 6 
 7     int T;
 8     long long a, b, c;
 9     scanf("%d", &T);
10     for(int i=1; i<=T;   i) {
11         scanf("%lld %lld %lld", &a, &b, &c);
12         if(a b > c) {
13             printf("Case #%d: truen", i);
14         } else {
15             printf("Case #%d: falsen", i);
16         }
17     }
18 
19     return 0;
20 }

 

B1016. 部分A B (15)

Description:

正整数A的“DA(为1位整数)部分”定义为由A中所有DA组成的新整数PA。例如:给定A = 3862767,DA = 6,则A的“6部分”PA是66,因为A中有2个6。

现给定A、DA、B、DB,请编写程序计算PA  PB

Input:

输入在一行中依次给出A、DA、B、DB,中间以空格分隔,其中0 < A, B < 1010

Output:

在一行中输出PA  PB的值。

Sample Input1:

3862767 6 13530293 3

Sample Output1:

399

Sample Input2:

3862767 1 13530293 8

Sample Output2:

0

 1 #include <cstdio>
 2 
 3 int main()
 4 {
 5     //freopen("E:\Temp\input.txt", "r", stdin);
 6 
 7     int Da, Db;
 8     long long pA = 0, pB = 0, A, B;
 9     scanf("%lld %d %lld %d", &A, &Da, &B, &Db);
10 
11     while(A != 0) {
12         if(A == Da) {
13             pA = pA*10 Da;
14         }
15         A /= 10;
16     }
17     while(B != 0) {
18         if(B == Db) {
19             pB = pB*10 Db;
20         }
21         B /= 10;
22     }
23 
24     printf("%lldn", pA pB);
25 
26     return 0;
27 }

 

B1026. 程序运行时间 (15)

Description:

要获得一个C语言程序的运行时间,常用的方法是调用头文件time.h,其中提供了clock()函数,可以捕捉从程序开始运行到clock()被调用时所耗费的时间。这个时间单位是clock tick,即“时钟打点”。同时还有一个常数CLK_TCK,给出了机器时钟每秒所走的时钟打点数。于是为了获得一个函数f的运行时间,我们只要在调用f之前先调用clock(),获得一个时钟打点数C1;在f执行完成后再调用clock(),获得另一个时钟打点数C2;两次获得的时钟打点数之差(C2-C1)就是f运行所消耗的时钟打点数,再除以常数CLK_TCK,就得到了以秒为单位的运行时间。

这里不妨简单假设常数CLK_TCK为100。现给定被测函数前后两次获得的时钟打点数,请你给出被测函数运行的时间。

Input:

输入在一行中顺序给出2个整数C1和C1。注意两次获得的时钟打点数肯定不相同,即C1 < C2,并且取值在[0, 107]。

Output:

在一行中输出被测函数运行的时间。运行时间必须按照“hh:mm:ss”(即2位的“时:分:秒”)格式输出;不足1秒的时间四舍五入到秒。

Sample Input:

123 4577973

Sample Output:

12:42:59

 1 #include <cstdio>
 2 
 3 int main()
 4 {
 5     //freopen("E:\Temp\input.txt", "r", stdin);
 6 
 7     int C1, C2;
 8     scanf("%d %d", &C1, &C2);
 9 
10     int ans = C2 - C1;
11     if(ans0 < 50) {
12         ans /= 100;
13     } else {
14         ans = ans/100 1;
15     }
16 
17     printf("d:d:dn", ans/3600, ans600/60, ans`);
18 
19     return 0;
20 }

 

B1008. 数组元素循环右移问题 (20)

Description:

一个数组A中存有N(N>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(M>=0)个位置,即将A中的数据由(A0A1……AN-1)变换为(AN-M …… AN-1 A0 A1……AN-M-1)(最后M个数循环移至最前面的M个位置)。如果需要考虑程序移动数据的次数尽量少,要如何设计移动的方法?

Input:

每个输入包含一个测试用例,第1行输入N ( 1<=N<=100)、M(M>=0);第2行输入N个整数,之间用空格分隔。

Output:

在一行中输出循环右移M位以后的整数序列,之间用空格分隔,序列结尾不能有多余空格。

Sample Input:

6 2
1 2 3 4 5 6

Sample Output:

5 6 1 2 3 4

 1 #include <cstdio>
 2 
 3 #define MaxSize 110
 4 
 5 int List[MaxSize];
 6 
 7 int main()
 8 {
 9     //freopen("E:\Temp\input.txt", "r", stdin);
10 
11     int N, M, counter = 1;
12     scanf("%d %d", &N, &M);
13     for(int i=0; i<N;   i) {
14         scanf("%d", &List[i]);
15     }
16 
17     M %= N;
18     for(int i=N-M; i<N;   i) {
19         if(counter != N) {
20             printf("%d ", List[i]);
21         } else {
22             printf("%dn", List[i]);
23         }
24         counter  ;
25     }
26     for(int i=0; i<N-M;   i) {
27         if(counter != N) {
28             printf("%d ", List[i]);
29         } else {
30             printf("%dn", List[i]);
31         }
32         counter  ;
33     }
34 
35     return 0;
36 }

 

B1012. 数字分类 (20)

Description:

定一系列正整数,请按要求对数字进行分类,并输出以下5个数字:

  • A1 = 能被5整除的数字中所有偶数的和;
  • A2 = 将被5除后余1的数字按给出顺序进行交错求和,即计算n1-n2 n3-n4...;
  • A3 = 被5除后余2的数字的个数;
  • A4 = 被5除后余3的数字的平均数,精确到小数点后1位;
  • A5 = 被5除后余4的数字中最大数字。

Input:

每个输入包含1个测试用例。每个测试用例先给出一个不超过1000的正整数N,随后给出N个不超过1000的待分类的正整数。数字间以空格分隔。

Output:

对给定的N个正整数,按题目要求计算A1~A5并在一行中顺序输出。数字间以空格分隔,但行末不得有多余空格。

若其中某一类数字不存在,则在相应位置输出“N”。

Sample Input1:

13 1 2 3 4 5 6 7 8 9 10 20 16 18

Sample Output1:

30 11 2 9.7 9

Sample Input2:

8 1 2 4 5 6 7 9 16

Sample Output2:

N 11 2 N 9

 1 #include <cstdio>
 2 
 3 #define MaxSize 5
 4 
 5 int List[MaxSize], ans[MaxSize];
 6 
 7 int main()
 8 {
 9     //freopen("E:\Temp\input.txt", "r", stdin);
10 
11     int N, temp;
12     scanf("%d", &N);
13     for(int i=0; i<N;   i) {
14         scanf("%d", &temp);
15         if(temp%5 == 0) {
16             if(temp%2 == 0) {
17                 ans[0]  = temp;
18                 List[0]  ;
19             }
20         } else if(temp%5 == 1) {
21             if(List[1]%2 == 0) {
22                 ans[1]  = temp;
23             } else {
24                 ans[1] -= temp;
25             }
26             List[1]  ;
27         } else if(temp%5 == 2) {
28             List[2]  ;
29         } else if(temp%5 == 3) {
30             ans[3]  = temp;
31             List[3]  ;
32         } else {
33             if(temp > ans[4]) {
34                 ans[4] = temp;
35             }
36             List[4]  ;
37         }
38     }
39 
40     if(List[0] == 0) {
41         printf("N ");
42     } else {
43         printf("%d ", ans[0]);
44     }
45     if(List[1] == 0) {
46         printf("N ");
47     } else {
48         printf("%d ", ans[1]);
49     }
50     if(List[2] == 0) {
51         printf("N ");
52     } else {
53         printf("%d ", List[2]);
54     }
55     if(List[3] == 0) {
56         printf("N ");
57     } else {
58         printf("%.1f ", (double)ans[3]/List[3]);
59     }
60     if(List[4] == 0) {
61         printf("Nn");
62     } else {
63         printf("%dn", ans[4]);
64     }
65 
66     return 0;
67 }

 

B1001.害死人不偿命的(3n 1)猜想 (15) Description: 卡拉兹(Callatz)猜想: 对任何一个自然数n,如果它是...

B1006. 换个格式输出整数

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

Description:

Description:

Description:

卡拉兹(Callatz)猜想:

让我们用字母B来表示“百”、字母S表示“十“,用“12...n”来表示个位数字n,换个格式来输出任一个不超过3位的正整数。例如234应该被输出为BBSSS1234,因为它有2个“百”、3个“十”、以及个位的4。

让我们用字母B来表示“百”、字母S表示“十“,用“12...n”来表示个位数字n(<10),换个格式来输出任一个不超过3位的正整数。例如234应该被输出为BBSSS1234,因为它有2个“百”、3个“十”、以及个位的4。

对任何一个自然数n,如果它是偶数,那么把它砍掉一半;如果它是奇数,那么把(3n 1)砍掉一半。这样一直反复砍下去,最后一定在某一步得到n=1。卡拉兹在1950年的世界数学家大会上公布了这个猜想,传说当时耶鲁大学师生齐动员,拼命想证明这个貌似很傻很天真的命题,结果闹得学生们无心学业,一心只证(3n 1),以至于有人说这是一个阴谋,卡拉兹是在蓄意延缓美国数学界教学与科研的进展……

Input:

Input:

我们今天的题目不是证明卡拉兹猜想,而是对给定的任一不超过1000的正整数n,简单地数一下,需要多少步(砍几下)才能得到n=1?

每个测试输入包含1个测试用例,给出正整数n。

每个测试输入包含1个测试用例,给出正整数n(<1000)。

Input:

Output:

Output:

每个测试输入包含1个测试用例,即给出自然数n的值。

每个测试用例的输出占一行,用规定的格式输出n。

每个测试用例的输出占一行,用规定的格式输出n。

Output:

Sample Input1:

Sample Input1:

输出从n计算到1需要的步数。

234

234

Sample Input:

Sample Output1:

Sample Output1:

3

BBSSS1234

BBSSS1234

Sample Output:

Sample Input2:

Sample Input2:

5

23

23

 1 #include <cstdio>
 2 
 3 int main()
 4 {
 5     //freopen("E:\Temp\input.txt", "r", stdin);
 6 
 7     int n, step = 0;
 8     scanf("%d", &n);
 9 
10     while(n != 1) {
11         if(n%2 == 0) {
12             n /= 2;
13         } else {
14             n = (3*n 1)/2;
15         }
16         step  ;
17     }
18 
19     printf("%dn", step);
20 
21     return 0;
22 }

Sample Output2:

Sample Output2:

 

SS123

SS123

B1032. 挖掘机技术哪家强 (20)

 1 #include <cstdio> 2  3 int main() 4 { 5     int n; 6     scanf("%d", &n); 7  8     int num = 0, ans[5]; 9     while(n != 0) {10         ans[num  ] = n;11         n /= 10;12     }13 14     for(int i=num-1; i>=0; --i) {15         if(i == 2) {16             for(int j=0; j<ans[i];   j)17                 printf("B");18         } else if(i == 1) {19             for(int j=0; j<ans[i];   j)20                 printf("S");21         } else {22             for(int j=1; j<=ans[i];   j)23                 printf("%d", j);24         }25     }26 27     return 0;28 }
 1 #include <cstdio>
 2 
 3 int main()
 4 {
 5     int n;
 6     scanf("%d", &n);
 7 
 8     int num = 0, ans[5];
 9     while(n != 0) {
10         ans[num  ] = n;
11         n /= 10;
12     }
13 
14     for(int i=num-1; i>=0; --i) {
15         if(i == 2) {
16             for(int j=0; j<ans[i];   j)
17                 printf("B");
18         } else if(i == 1) {
19             for(int j=0; j<ans[i];   j)
20                 printf("S");
21         } else {
22             for(int j=1; j<=ans[i];   j)
23                 printf("%d", j);
24         }
25     }
26 
27     return 0;
28 }

Description:

B1021. 个位数统计

 

为了用事实说明挖掘机技术到底哪家强,PAT组织了一场挖掘机技能大赛。现请你根据比赛结果统计出技术最强的那个学校。

Description:

B1021. 个位数统计 (15)

Input:

给定一个k位整数N = dk-1*10k-1 ... d1*101 d0 (0<=di<=9, i=0,...,k-1, dk-1>0),请编写程序统计每种不同的个位数字出现的次数。例如:给定N = 100311,则有2个0,3个1,和1个3。

Description:

输入在第1行给出不超过105的正整数N,即参赛人数。随后N行,每行给出一位参赛者的信息和成绩,包括其所代表的学校的编号(从1开始连续编号)、及其比赛成绩(百分制),中间以空格分隔。

Input:

给定一个k位整数N = dk-1*10k-1 ... d1*101

Output:

每个输入包含1个测试用例,即一个不超过1000位的正整数N。

  • d0 (0<=di<=9, i=0,...,k-1, dk-1>0),请编写程序统计每种不同的个位数字出现的次数。例如:给定N = 100311,则有2个0,3个1,和1个3。

在一行中给出总得分最高的学校的编号、及其总分,中间以空格分隔。题目保证答案唯一,没有并列。

Output:

Input:

Sample Input:

对N中每一种不同的个位数字,以D:M的格式在一行中输出该位数字D及其在N中出现的次数M。要求按D的升序输出。

每个输入包含1个测试用例,即一个不超过1000位的正整数N。

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

Sample Input:

Output:

Sample Output:

100311

对N中每一种不同的个位数字,以D:M的格式在一行中输出该位数字D及其在N中出现的次数M。要求按D的升序输出。

2 150

Sample Output:

Sample Input:

 1 #include <cstdio>
 2 
 3 #define MaxSize 100010
 4 
 5 int school[MaxSize];
 6 
 7 int main()
 8 {
 9     //freopen("E:\Temp\input.txt", "r", stdin);
10 
11     int n, schID, score;
12     scanf("%d", &n);
13     for(int i=0; i<n;   i) {
14         scanf("%d %d", &schID, &score);
15         school[schID]  = score;
16     }
17 
18     int ID, maxscore = -1;
19     for(int i=1; i<=n;   i) {
20         if(school[i] > maxscore) {
21             ID = i;
22             maxscore = school[i];
23         }
24     }
25 
26     printf("%d %dn", ID, maxscore);
27 }

0:2
1:3
3:1

100311

 

 1 #include <cstdio> 2 #include <cstring> 3  4 #define MaxSize 1010 5 char List[MaxSize]; 6  7 int main() 8 { 9     //freopen("E:\Temp\input.txt", "r", stdin);10 11     gets;12 13     int len = strlen, ans[10] = {0};14     for(int i=0; i<len;   i)15           ans[List[i]-'0'];16 17     for(int i=0; i<10;   i) {18         if(ans[i] != 0)19             printf("%d:%dn", i, ans[i]);20     }21 22     return 0;23 }

Sample Output:

B1011. A B和C (15)

B1031. 查验身份证

0:2
1:3
3:1

Description:

Description:

 1 #include <cstdio>
 2 #include <cstring>
 3 
 4 #define MaxSize 1010
 5 char List[MaxSize];
 6 
 7 int main()
 8 {
 9     //freopen("E:\Temp\input.txt", "r", stdin);
10 
11     gets(List);
12 
13     int len = strlen(List), ans[10] = {0};
14     for(int i=0; i<len;   i)
15           ans[List[i]-'0'];
16 
17     for(int i=0; i<10;   i) {
18         if(ans[i] != 0)
19             printf("%d:%dn", i, ans[i]);
20     }
21 
22     return 0;
23 }

给定区间[-231, 231]内的3个整数A、B和C,请判断A B是否大于C。

一个合法的身份证号码由17位地区、日期编号和顺序编号加1位校验码组成。校验码的计算规则如下:

 

Input:

首先对前17位数字加权求和,权重分配为:{7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};然后将计算的和对11取模得到值Z;最后按照以下关系对应Z值与校验码M的值:

B1031. 查验身份证 (15)

输入第1行给出正整数T(<=10),是测试用例的个数。随后给出T组测试用例,每组占一行,顺序给出A、B和C。整数间以空格分隔。

Z:0 1 2 3 4 5 6 7 8 9 10
M:1 0 X 9 8 7 6 5 4 3 2

Description:

Output:

现在给定一些身份证号码,请你验证校验码的有效性,并输出有问题的号码。

一个合法的身份证号码由17位地区、日期编号和顺序编号加1位校验码组成。校验码的计算规则如下:

对每组测试用例,在一行中输出“Case #X: true”如果A B>C,否则输出“Case #X: false”,其中X是测试用例的编号(从1开始)。

Input:

首先对前17位数字加权求和,权重分配为:{7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};然后将计算的和对11取模得到值Z;最后按照以下关系对应Z值与校验码M的值:

Sample Input:

输入第一行给出正整数N(<= 100)是输入的身份证号码的个数。随后N行,每行给出1个18位身份证号码。

Z:0 1 2 3 4 5 6 7 8 9 10
M:1 0 X 9 8 7 6 5 4 3 2

4
1 2 3
2 3 4
2147483647 0 2147483646
0 -2147483648 -2147483647

Output:

现在给定一些身份证号码,请你验证校验码的有效性,并输出有问题的号码。

Sample Output:

按照输入的顺序每行输出1个有问题的身份证号码。这里并不检验前17位是否合理,只检查前17位是否全为数字且最后1位校验码计算准确。如果所有号码都正常,则输出“All passed”。

Input:

Case #1: false
Case #2: true
Case #3: true
Case #4: false

Sample Input1:

输入第一行给出正整数N(<= 100)是输入的身份证号码的个数。随后N行,每行给出1个18位身份证号码。

 1 #include <cstdio>
 2 
 3 int main()
 4 {
 5     //freopen("E:\Temp\input.txt", "r", stdin);
 6 
 7     int T;
 8     long long a, b, c;
 9     scanf("%d", &T);
10     for(int i=1; i<=T;   i) {
11         scanf("%lld %lld %lld", &a, &b, &c);
12         if(a b > c) {
13             printf("Case #%d: truen", i);
14         } else {
15             printf("Case #%d: falsen", i);
16         }
17     }
18 
19     return 0;
20 }

4
320124198808240056
12010X198901011234
110108196711301866
37070419881216001X

Output:

 

Sample Output1:

按照输入的顺序每行输出1个有问题的身份证号码。这里并不检验前17位是否合理,只检查前17位是否全为数字且最后1位校验码计算准确。如果所有号码都正常,则输出“All passed”。

B1016. 部分A B (15)

12010X198901011234
110108196711301866
37070419881216001X

Sample Input1:

Description:

Sample Input2:

4
320124198808240056
12010X198901011234
110108196711301866
37070419881216001X

正整数A的“DA(为1位整数)部分”定义为由A中所有DA组成的新整数PA。例如:给定A = 3862767,DA = 6,则A的“6部分”PA是66,因为A中有2个6。

2
320124198808240056
110108196711301862

Sample Output1:

现给定A、DA、B、DB,请编写程序计算PA  PB

Sample Output2:

12010X198901011234
110108196711301866
37070419881216001X

Input:

All passed

Sample Input2:

输入在一行中依次给出A、DA、B、DB,中间以空格分隔,其中0 < A, B < 1010

 1 #include <cstdio> 2 #include <cstring> 3  4 int w[] = {7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2}; 5 char change[] = {'1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'}; 6  7 int main() 8 { 9     int n;10     char str[20];11     bool flag = true;12     scanf("%d", &n);13     for(int i=0; i<n;   i) {14         scanf("%s", str);15         int j, last = 0;16         for(j=0; j<17;   j) {17             if(!(str[j]>='0' && str[j]<='9'))   break;18             last  = (str[j]-'0')*w[j];19         }20         if(j < 17) {21             flag = false;22             printf("%sn", str);23         } else {24             if(change[last] != str[17]) {25                 flag = false;26                 printf("%sn", str);27             }28         }29     }30     if(flag == true)    printf("All passedn");31 32     return 0;33 }

2
320124198808240056
110108196711301862

Output:

B1002. 写出这个数

Sample Output2:

在一行中输出PA  PB的值。

Description:

All passed

Sample Input1:

读入一个自然数n,计算其各位数字之和,用汉语拼音写出和的每一位数字。

 1 #include <cstdio>
 2 #include <cstring>
 3 
 4 int w[] = {7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2};
 5 char change[] = {'1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'};
 6 
 7 int main()
 8 {
 9     int n;
10     char str[20];
11     bool flag = true;
12     scanf("%d", &n);
13     for(int i=0; i<n;   i) {
14         scanf("%s", str);
15         int j, last = 0;
16         for(j=0; j<17;   j) {
17             if(!(str[j]>='0' && str[j]<='9'))   break;
18             last  = (str[j]-'0')*w[j];
19         }
20         if(j < 17) {
21             flag = false;
22             printf("%sn", str);
23         } else {
24             if(change[last] != str[17]) {
25                 flag = false;
26                 printf("%sn", str);
27             }
28         }
29     }
30     if(flag == true)    printf("All passedn");
31 
32     return 0;
33 }

3862767 6 13530293 3

Input:

 

Sample Output1:

每个测试输入包含1个测试用例,即给出自然数n的值。这里保证n小于10100。

B1002. 写出这个数 (20)

399

Output:

Description:

Sample Input2:

在一行内输出n的各位数字之和的每一位,拼音数字间有1 空格,但一行中最后一个拼音数字后没有空格。

读入一个自然数n,计算其各位数字之和,用汉语拼音写出和的每一位数字。

3862767 1 13530293 8

Sample Input:

Input:

Sample Output2:

1234567890987654321123456789

每个测试输入包含1个测试用例,即给出自然数n的值。这里保证n小于10100

0

Sample Output:

Output:

 1 #include <cstdio>
 2 
 3 int main()
 4 {
 5     //freopen("E:\Temp\input.txt", "r", stdin);
 6 
 7     int Da, Db;
 8     long long pA = 0, pB = 0, A, B;
 9     scanf("%lld %d %lld %d", &A, &Da, &B, &Db);
10 
11     while(A != 0) {
12         if(A == Da) {
13             pA = pA*10 Da;
14         }
15         A /= 10;
16     }
17     while(B != 0) {
18         if(B == Db) {
19             pB = pB*10 Db;
20         }
21         B /= 10;
22     }
23 
24     printf("%lldn", pA pB);
25 
26     return 0;
27 }

yi san wu

在一行内输出n的各位数字之和的每一位,拼音数字间有1 空格,但一行中最后一个拼音数字后没有空格。

 

 1 #include <cstdio> 2 #include <cstring> 3  4 int main() 5 { 6     char str[110]; 7     gets; 8  9     int ans[10], num = 0, len = strlen;10     int sum = 0;11     for(int i=0; i<len;   i)12         sum  = str[i]-'0';13     while(sum != 0) {14         ans[num  ] = sum;15         sum /= 10;16     }17     char change[10][5] = {"ling", "yi", "er", "san", "si", "wu", "liu", "qi", "ba", "jiu"};18 19     for(int i=num-1; i>=0; i--) {20         printf("%s", change[ans[i]]);21         if(i != 0)  printf(" ");22         else printf("n");23     }24 25     return 0;26 }

Sample Input:

B1026. 程序运行时间 (15)

B1009. 说反话

1234567890987654321123456789

Description:

Description:

Sample Output:

要获得一个C语言程序的运行时间,常用的方法是调用头文件time.h,其中提供了clock()函数,可以捕捉从程序开始运行到clock()被调用时所耗费的时间。这个时间单位是clock tick,即“时钟打点”。同时还有一个常数CLK_TCK,给出了机器时钟每秒所走的时钟打点数。于是为了获得一个函数f的运行时间,我们只要在调用f之前先调用clock(),获得一个时钟打点数C1;在f执行完成后再调用clock(),获得另一个时钟打点数C2;两次获得的时钟打点数之差(C2-C1)就是f运行所消耗的时钟打点数,再除以常数CLK_TCK,就得到了以秒为单位的运行时间。

给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出。

yi san wu

这里不妨简单假设常数CLK_TCK为100。现给定被测函数前后两次获得的时钟打点数,请你给出被测函数运行的时间。

Input:

 1 #include <cstdio>
 2 #include <cstring>
 3 
 4 int main()
 5 {
 6     char str[110];
 7     gets(str);
 8 
 9     int ans[10], num = 0, len = strlen(str);
10     int sum = 0;
11     for(int i=0; i<len;   i)
12         sum  = str[i]-'0';
13     while(sum != 0) {
14         ans[num  ] = sum;
15         sum /= 10;
16     }
17     char change[10][5] = {"ling", "yi", "er", "san", "si", "wu", "liu", "qi", "ba", "jiu"};
18 
19     for(int i=num-1; i>=0; i--) {
20         printf("%s", change[ans[i]]);
21         if(i != 0)  printf(" ");
22         else printf("n");
23     }
24 
25     return 0;
26 }

Input:

测试输入包含一个测试用例,在一行内给出总长度不超过80的字符串。字符串由若干单词和若干空格组成,其中单词是由英文字母组成的字符串,单词之间用1个空格分开,输入保证句子末尾没有多余的空格。

 

输入在一行中顺序给出2个整数C1和C1。注意两次获得的时钟打点数肯定不相同,即C1 < C2,并且取值在[0, 107]。

Output:

B1009. 说反话 (20)

Output:

每个测试用例的输出占一行,输出倒序后的句子。

Description:

在一行中输出被测函数运行的时间。运行时间必须按照“hh:mm:ss”(即2位的“时:分:秒”)格式输出;不足1秒的时间四舍五入到秒。

Sample Input:

给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出。

Sample Input:

Hello World Here I Come

Input:

123 4577973

Sample Output:

测试输入包含一个测试用例,在一行内给出总长度不超过80的字符串。字符串由若干单词和若干空格组成,其中单词是由英文字母(大小写有区分)组成的字符串,单词之间用1个空格分开,输入保证句子末尾没有多余的空格。

Sample Output:

Come I Here World Hello

Output:

12:42:59

 1 #include <cstdio> 2  3 #define MaxSize 100 4 char List[MaxSize][MaxSize]; 5  6 int main() 7 { 8     //freopen("E:\Temp\input.txt", "r", stdin); 9 10     int num = 0;11     while(scanf("%s", List[num]) != EOF)12         num  ;13 14     for(int i=num-1; i>=0; --i) {15         printf("%s", List[i]);16         if(i != 0)  printf(" ");17         else printf("n");18     }19 20     return 0;21 }

 1 #include <cstdio> 2 #include <cstring> 3  4 #define MaxSize 100 5 char List[MaxSize], ans[MaxSize][MaxSize]; 6  7 int main() 8 { 9     //freopen("E:\Temp\input.txt", "r", stdin);10 11     gets;12 13     int num = 0, counter = 0, len = strlen;14     for(int i=0; i<len;   i) {15         if(List[i] != ' ')16             ans[num][counter  ] = List[i];17         else {18             counter = 0;19               num;20         }21     }22 23     for(int i=num; i>=0; --i) {24         printf("%s", ans[i]);25         if(i != 0)  printf(" ");26         else printf("n");27     }28 29     return 0;30 }

每个测试用例的输出占一行,输出倒序后的句子。

 1 #include <cstdio>
 2 
 3 int main()
 4 {
 5     //freopen("E:\Temp\input.txt", "r", stdin);
 6 
 7     int C1, C2;
 8     scanf("%d %d", &C1, &C2);
 9 
10     int ans = C2 - C1;
11     if(ans0 < 50) {
12         ans /= 100;
13     } else {
14         ans = ans/100 1;
15     }
16 
17     printf("d:d:dn", ans/3600, ans600/60, ans`);
18 
19     return 0;
20 }

B1014. 福尔摩斯的约会

Sample Input:

 

Description:

Hello World Here I Come

B1008. 数组元素循环右移问题 (20)

大侦探福尔摩斯接到一张奇怪的字条:“我们约会吧! 3485djDkxh4hhGE 2984akDfkkkkggEdsb s&hgsfdk d&Hyscvnm”。大侦探很快就明白了,字条上奇怪的乱码实际上就是约会的时间“星期四 14:04”,因为前面两字符串中第1对相同的大写英文字母是第4个字母'D',代表星期四;第2对相同的字符是'E',那是第5个英文字母,代表一天里的第14个钟头(于是一天的0点到23点由数字0到9、以及大写字母A到N表示);后面两字符串第1对相同的英文字母's'出现在第4个位置上,代表第4分钟。现给定两对字符串,请帮助福尔摩斯解码得到约会的时间。

Sample Output:

Description:

Input:

Come I Here World Hello

一个数组A中存有N(N>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(M>=0)个位置,即将A中的数据由(A0A1……AN-1)变换为(AN-M …… AN-1 A0 A1……AN-M-1)(最后M个数循环移至最前面的M个位置)。如果需要考虑程序移动数据的次数尽量少,要如何设计移动的方法?

输入在4行中分别给出4个非空、不包含空格、且长度不超过60的字符串。

 1 #include <cstdio>
 2 
 3 #define MaxSize 100
 4 char List[MaxSize][MaxSize];
 5 
 6 int main()
 7 {
 8     //freopen("E:\Temp\input.txt", "r", stdin);
 9 
10     int num = 0;
11     while(scanf("%s", List[num]) != EOF)
12         num  ;
13 
14     for(int i=num-1; i>=0; --i) {
15         printf("%s", List[i]);
16         if(i != 0)  printf(" ");
17         else printf("n");
18     }
19 
20     return 0;
21 }

 1 #include <cstdio>
 2 #include <cstring>
 3 
 4 #define MaxSize 100
 5 char List[MaxSize], ans[MaxSize][MaxSize];
 6 
 7 int main()
 8 {
 9     //freopen("E:\Temp\input.txt", "r", stdin);
10 
11     gets(List);
12 
13     int num = 0, counter = 0, len = strlen(List);
14     for(int i=0; i<len;   i) {
15         if(List[i] != ' ')
16             ans[num][counter  ] = List[i];
17         else {
18             counter = 0;
19               num;
20         }
21     }
22 
23     for(int i=num; i>=0; --i) {
24         printf("%s", ans[i]);
25         if(i != 0)  printf(" ");
26         else printf("n");
27     }
28 
29     return 0;
30 }

Input:

Output:

 

每个输入包含一个测试用例,第1行输入N ( 1<=N<=100)、M(M>=0);第2行输入N个整数,之间用空格分隔。

在一行中输出约会的时间,格式为“DAY HH:MM”,其中“DAY”是某星期的3字符缩写,即MON表示星期一,TUE表示星期二,WED表示星期三,THU表示星期四,FRI表示星期五,SAT表示星期六,SUN表示星期日。题目输入保证每个测试存在唯一解。

B1014. 福尔摩斯的约会 (20)

Output:

Sample Input:

Description:

在一行中输出循环右移M位以后的整数序列,之间用空格分隔,序列结尾不能有多余空格。

3485djDkxh4hhGE

大侦探福尔摩斯接到一张奇怪的字条:“我们约会吧! 3485djDkxh4hhGE 2984akDfkkkkggEdsb s&hgsfdk d&Hyscvnm”。大侦探很快就明白了,字条上奇怪的乱码实际上就是约会的时间“星期四 14:04”,因为前面两字符串中第1对相同的大写英文字母(大小写有区分)是第4个字母'D',代表星期四;第2对相同的字符是'E',那是第5个英文字母,代表一天里的第14个钟头(于是一天的0点到23点由数字0到9、以及大写字母A到N表示);后面两字符串第1对相同的英文字母's'出现在第4个位置(从0开始计数)上,代表第4分钟。现给定两对字符串,请帮助福尔摩斯解码得到约会的时间。

Sample Input:

2984akDfkkkkggEdsb

Input:

6 2
1 2 3 4 5 6

s&hgsfdk

输入在4行中分别给出4个非空、不包含空格、且长度不超过60的字符串。

Sample Output:

d&Hyscvnm

Output:

澳门新萄京官方网站字符串管理习题集,pat模拟习题集。5 6 1 2 3 4

Sample Output:

在一行中输出约会的时间,格式为“DAY HH:MM”,其中“DAY”是某星期的3字符缩写,即MON表示星期一,TUE表示星期二,WED表示星期三,THU表示星期四,FRI表示星期五,SAT表示星期六,SUN表示星期日。题目输入保证每个测试存在唯一解。

 1 #include <cstdio>
 2 
 3 #define MaxSize 110
 4 
 5 int List[MaxSize];
 6 
 7 int main()
 8 {
 9     //freopen("E:\Temp\input.txt", "r", stdin);
10 
11     int N, M, counter = 1;
12     scanf("%d %d", &N, &M);
13     for(int i=0; i<N;   i) {
14         scanf("%d", &List[i]);
15     }
16 
17     M %= N;
18     for(int i=N-M; i<N;   i) {
19         if(counter != N) {
20             printf("%d ", List[i]);
21         } else {
22             printf("%dn", List[i]);
23         }
24         counter  ;
25     }
26     for(int i=0; i<N-M;   i) {
27         if(counter != N) {
28             printf("%d ", List[i]);
29         } else {
30             printf("%dn", List[i]);
31         }
32         counter  ;
33     }
34 
35     return 0;
36 }

THU 14:04

澳门新萄京官方网站字符串管理习题集,pat模拟习题集。Sample Input:

 

 1 #include <cstdio> 2 #include <cstring> 3  4 int main() 5 { 6     char week[7][5] = {"MON", "TUE", "WED", "THU", "FRI", "SAT", "SUN"}; 7     char str1[70], str2[70], str3[70], str4[70]; 8     gets, gets, gets, gets; 9 10     int len1 = strlen, len2 = strlen, len3 = strlen, len4 = strlen;11     int i;12     for(i=0; i<len1&&i<len2;   i) {13         if(str1[i]==str2[i] && str1[i]>='A' && str1[i]<='G') {14             printf("%s ", week[str1[i]-'A']);15             break;16         }17     }18     for(  i; i<len1&&i<len2;   i) {19         if(str1[i] == str2[i]) {20             if(str1[i]>='0' && str1[i]<='9') {21                 printf("d:", str1[i]-'0');22                 break;23             } else if(str1[i]>='A' && str1[i]<='N') {24                 printf("d:", str1[i]-'A' 10);25                 break;26             }27         }28     }29     for(i=0; i<len3&&i<len4;   i) {30         if(str3[i] == str4[i]) {31             if((str3[i]>='A' && str3[i]<='Z') || (str3[i]>='a'&&str3[i]<='z')) {32                 printf("d", i);33                 break;34             }35         }36     }37 38     return 0;39 }

3485djDkxh4hhGE

B1012. 数字分类 (20)

A1061. Dating

2984akDfkkkkggEdsb

Description:

Description:

s&hgsfdk

定一系列正整数,请按要求对数字进行分类,并输出以下5个数字:

Sherlock Holmes received a note with some strange strings: "Let's date! 3485djDkxh4hhGE 2984akDfkkkkggEdsb s&hgsfdk d&Hyscvnm". It took him only a minute to figure out that those strange strings are actually referring to the coded time "Thursday 14:04" -- since the first common capital English letter (case sensitive) shared by the first two strings is the 4th capital letter 'D', representing the 4th day in a week; the second common character is the 5th capital letter 'E', representing the 14th hour (hence the hours from 0 to 23 in a day are represented by the numbers from 0 to 9 and the capital letters from A to N, respectively); and the English letter shared by the last two strings is 's' at the 4th position, representing the 4th minute. Now given two pairs of strings, you are supposed to help Sherlock decode the dating time.

d&Hyscvnm

  • A1 = 能被5整除的数字中所有偶数的和;
  • A2

    将被5除后余1的数字按给出顺序进行交错求和,即计算n1-n2 n3-n4...;
  • A3 = 被5除后余2的数字的个数;
  • A4 = 被5除后余3的数字的平均数,精确到小数点后1位;
  • A5 = 被5除后余4的数字中最大数字。

Input:

Sample Output:

Input:

Each input file contains one test case. Each case gives 4 non-empty strings of no more than 60 characters without white space in 4 lines.

THU 14:04

每个输入包含1个测试用例。每个测试用例先给出一个不超过1000的正整数N,随后给出N个不超过1000的待分类的正整数。数字间以空格分隔。

Output:

 1 #include <cstdio>
 2 #include <cstring>
 3 
 4 int main()
 5 {
 6     char week[7][5] = {"MON", "TUE", "WED", "THU", "FRI", "SAT", "SUN"};
 7     char str1[70], str2[70], str3[70], str4[70];
 8     gets(str1), gets(str2), gets(str3), gets(str4);
 9 
10     int len1 = strlen(str1), len2 = strlen(str2), len3 = strlen(str3), len4 = strlen(str4);
11     int i;
12     for(i=0; i<len1&&i<len2;   i) {
13         if(str1[i]==str2[i] && str1[i]>='A' && str1[i]<='G') {
14             printf("%s ", week[str1[i]-'A']);
15             break;
16         }
17     }
18     for(  i; i<len1&&i<len2;   i) {
19         if(str1[i] == str2[i]) {
20             if(str1[i]>='0' && str1[i]<='9') {
21                 printf("d:", str1[i]-'0');
22                 break;
23             } else if(str1[i]>='A' && str1[i]<='N') {
24                 printf("d:", str1[i]-'A' 10);
25                 break;
26             }
27         }
28     }
29     for(i=0; i<len3&&i<len4;   i) {
30         if(str3[i] == str4[i]) {
31             if((str3[i]>='A' && str3[i]<='Z') || (str3[i]>='a'&&str3[i]<='z')) {
32                 printf("d", i);
33                 break;
34             }
35         }
36     }
37 
38     return 0;
39 }

Output:

For each test case, print the decoded time in one line, in the format "DAY HH:MM", where "DAY" is a 3-character abbreviation for the days in a week -- that is, "MON" for Monday, "TUE" for Tuesday, "WED" for Wednesday, "THU" for Thursday, "FRI" for Friday, "SAT" for Saturday, and "SUN" for Sunday. It is guaranteed that the result is unique for each case.

 

对给定的N个正整数,按题目要求计算A1~A5并在一行中顺序输出。数字间以空格分隔,但行末不得有多余空格。

Sample Input:

A1061. Dating (20)

若其中某一类数字不存在,则在相应位置输出“N”。

3485djDkxh4hhGE

Description:

Sample Input1:

2984akDfkkkkggEdsb

Sherlock Holmes received a note with some strange strings: "Let's date! 3485djDkxh4hhGE 2984akDfkkkkggEdsb s&hgsfdk d&Hyscvnm". It took him only a minute to figure out that those strange strings are actually referring to the coded time "Thursday 14:04" -- since the first common capital English letter (case sensitive) shared by the first two strings is the 4th capital letter 'D', representing the 4th day in a week; the second common character is the 5th capital letter 'E', representing the 14th hour (hence the hours from 0 to 23 in a day are represented by the numbers from 0 to 9 and the capital letters from A to N, respectively); and the English letter shared by the last two strings is 's' at the 4th position, representing the 4th minute. Now given two pairs of strings, you are supposed to help Sherlock decode the dating time.

13 1 2 3 4 5 6 7 8 9 10 20 16 18

s&hgsfdk

Input:

Sample Output1:

d&Hyscvnm

Each input file contains one test case. Each case gives 4 non-empty strings of no more than 60 characters without white space in 4 lines.

30 11 2 9.7 9

Sample Output:

Output:

Sample Input2:

THU 14:04

For each test case, print the decoded time in one line, in the format "DAY HH:MM", where "DAY" is a 3-character abbreviation for the days in a week -- that is, "MON" for Monday, "TUE" for Tuesday, "WED" for Wednesday, "THU" for Thursday, "FRI" for Friday, "SAT" for Saturday, and "SUN" for Sunday. It is guaranteed that the result is unique for each case.

8 1 2 4 5 6 7 9 16

 1 #include <cstdio> 2 #include <cstring> 3  4 #define MaxSize 100 5 char str1[MaxSize], str2[MaxSize], str3[MaxSize], str4[MaxSize]; 6 char date[7][5] = {"MON", "TUE", "WED", "THU", "FRI", "SAT", "SUN"}; 7  8 int main() 9 {10     //freopen("E:\Temp\input.txt", "r", stdin);11 12     gets, gets, gets, gets;13 14     int i = 0, len1 = strlen, len2 = strlen, len3 = strlen, len4 = strlen;15     for(; i<len1&&i<len2;   i) {16         if(str1[i]==str2[i] && str1[i]>='A'&& str1[i]<='G') {17             printf("%s ", date[str1[i]-'A']);18             break;19         }20     }21     for(  i; i<len1&&i<len2;   i) {22         if(str1[i]==str2[i]) {23             if(str1[i]>='0' && str1[i]<='9') {24                 printf("d:", str1[i]-'0');25                 break;26             } else if(str1[i]>='A' && str1[i]<='N') {27                 printf("d:", str1[i]-'A' 10);28                 break;29             }30         }31     }32     for(i=0; i<len3&&i<len4;   i) {33         if(str3[i] == str4[i]) {34             if((str3[i]>='a'&&str1[i]<='z') || (str3[i]>='A'&&str3[i]<='Z')) {35                 printf("d", i);36                 break;37             }38         }39     }40 41     return 0;42 }

Sample Input:

Sample Output2:

3485djDkxh4hhGE

N 11 2 N 9

2984akDfkkkkggEdsb

 1 #include <cstdio>
 2 
 3 #define MaxSize 5
 4 
 5 int List[MaxSize], ans[MaxSize];
 6 
 7 int main()
 8 {
 9     //freopen("E:\Temp\input.txt", "r", stdin);
10 
11     int N, temp;
12     scanf("%d", &N);
13     for(int i=0; i<N;   i) {
14         scanf("%d", &temp);
15         if(temp%5 == 0) {
16             if(temp%2 == 0) {
17                 ans[0]  = temp;
18                 List[0]  ;
19             }
20         } else if(temp%5 == 1) {
21             if(List[1]%2 == 0) {
22                 ans[1]  = temp;
23             } else {
24                 ans[1] -= temp;
25             }
26             List[1]  ;
27         } else if(temp%5 == 2) {
28             List[2]  ;
29         } else if(temp%5 == 3) {
30             ans[3]  = temp;
31             List[3]  ;
32         } else {
33             if(temp > ans[4]) {
34                 ans[4] = temp;
35             }
36             List[4]  ;
37         }
38     }
39 
40     if(List[0] == 0) {
41         printf("N ");
42     } else {
43         printf("%d ", ans[0]);
44     }
45     if(List[1] == 0) {
46         printf("N ");
47     } else {
48         printf("%d ", ans[1]);
49     }
50     if(List[2] == 0) {
51         printf("N ");
52     } else {
53         printf("%d ", List[2]);
54     }
55     if(List[3] == 0) {
56         printf("N ");
57     } else {
58         printf("%.1f ", (double)ans[3]/List[3]);
59     }
60     if(List[4] == 0) {
61         printf("Nn");
62     } else {
63         printf("%dn", ans[4]);
64     }
65 
66     return 0;
67 }

s&hgsfdk

 

d&Hyscvnm

Sample Output:

THU 14:04

 1 #include <cstdio>
 2 #include <cstring>
 3 
 4 #define MaxSize 100
 5 char str1[MaxSize], str2[MaxSize], str3[MaxSize], str4[MaxSize];
 6 char date[7][5] = {"MON", "TUE", "WED", "THU", "FRI", "SAT", "SUN"};
 7 
 8 int main()
 9 {
10     //freopen("E:\Temp\input.txt", "r", stdin);
11 
12     gets(str1), gets(str2), gets(str3), gets(str4);
13 
14     int i = 0, len1 = strlen(str1), len2 = strlen(str2), len3 = strlen(str3), len4 = strlen(str4);
15     for(; i<len1&&i<len2;   i) {
16         if(str1[i]==str2[i] && str1[i]>='A'&& str1[i]<='G') {
17             printf("%s ", date[str1[i]-'A']);
18             break;
19         }
20     }
21     for(  i; i<len1&&i<len2;   i) {
22         if(str1[i]==str2[i]) {
23             if(str1[i]>='0' && str1[i]<='9') {
24                 printf("d:", str1[i]-'0');
25                 break;
26             } else if(str1[i]>='A' && str1[i]<='N') {
27                 printf("d:", str1[i]-'A' 10);
28                 break;
29             }
30         }
31     }
32     for(i=0; i<len3&&i<len4;   i) {
33         if(str3[i] == str4[i]) {
34             if((str3[i]>='a'&&str1[i]<='z') || (str3[i]>='A'&&str3[i]<='Z')) {
35                 printf("d", i);
36                 break;
37             }
38         }
39     }
40 
41     return 0;
42 }

 

本文由澳门新萄京官方网站发布于www.8455.com,转载请注明出处:澳门新萄京官方网站字符串管理习题集,pat模拟

关键词: