【PTA】【C语言】复盘练习——编程题
目录
R7-1 完全数
输入格式:
输出格式:
输入样例:
输出样例:
输入样例:
输出样例:
R7-2 判断完全数
输入样例:
输出样例:
输入样例:
输出样例:
R7-3 函数返回一个整数是否为完全数
输入样例:
输出样例:
输入样例:
输出样例:
R7-4 h0034. 平方矩阵 II
输入格式:
输出格式:
输入样例:
输出样例:
R7-5 选夫婿^_^
输入格式:
输出格式:
输入样例:
输出样例:
R7-6 一帮一
输入格式:
输出格式:
输入样例:
输出样例:
R7-7 猜数字*
输入样例
输出样例
R7-8 h0105. 弟弟的作业
输入格式:
输出格式:
输入样例:
输出样例:
R7-9 一维数组最大值和最小值交换
输入格式:
输出格式:
输入样例:
输出样例:
R7-10 打印九九口诀表
输入格式:
输出格式:
输入样例:
输出样例:
R7-11 乒乓球赛轮次
输入格式:
输出格式:
输入样例:
输出样例:
R7-12 有理数加法
输入格式:
输出格式:
输入样例1:
输出样例1:
输入样例2:
输出样例2:
R7-13 万万没想到之还是没想到
输入格式:
输出格式:
输入样例:
输出样例:
R7-14 到底是不是太胖了
输入格式:
输出格式:
输入样例:
输出样例:
R7-1 完全数
完全数,指所有的真因子(即除了自身以外的约数)的和,恰好等于它本身。本题目要求读入2个整数A和B,输出该范围内的所有完全数(A<=完全数<=B)。
输入格式:
输入在一行中给出2个整数A和B。
输出格式:
以“完全数=约数1+约数2+...”的格式,输出该范围(A<=完全数<=B)内的所有完全数,每个完全数占一行。若该范围内没有完全数,则打印“no”。
输入样例:
在这里给出一组输入。例如:
1 100
输出样例:
在这里给出相应的输出。例如:
6=1+2+3
28=1+2+4+7+14
输入样例:
在这里给出一组输入。例如:
10 20
输出样例:
在这里给出相应的输出。例如:
no
代码如下:
#include <stdio.h>
#include <string.h>
int func(int a)
{int i, b[99] = {0}, j = 0, sum = 0;for (i = 1; i < a; i++){if (a % i == 0){sum += i;b[j++] = i;}}if (sum == a){printf("%d=", a);for (i = 0; b[i] != 0; i++){printf("%d", b[i]);if (b[i + 1] != 0)printf("+");}printf("\n");return 1;}return 0;
}int main()
{int m, n, i, count = 0;scanf("%d %d", &m, &n);for (i = m; i <= n; i++){if (func(i) == 1)count += 1;}if (count == 0)printf("no");return 0;
}
R7-2 判断完全数
编程输入一个不小于6的正整数N(N<99999999),输出它是不是完全数。真约数之和恰好等于它本身的数是完全数。
输入样例:
28
输出样例:
YES
输入样例:
100
输出样例:
NO
代码如下:
#include <stdio.h>
#include <string.h>
int func(int a)
{int i, sum = 0;for (i = 1; i < a; i++){if (a % i == 0){sum += i;}}if (sum == a)return 1;return 0;
}int main()
{int n;scanf("%d", &n);if (func(n))printf("YES");elseprintf("NO");return 0;
}
R7-3 函数返回一个整数是否为完全数
编写函数返回形式参数(一个正整数)是否为完全数。主函数功能为:输入一个整数N(N<5000),输出不小于N的第一个完全数。
输入样例:
20
输出样例:
28
输入样例:
100
输出样例:
496
代码如下:
#include<stdio.h>
int is_perfect(int n)
{int i,sum = 0;for(i = 1; i < n; i++){if(n % i == 0)sum += i;}if(sum == n)return 1;return 0;
}
int main()
{int n, i;scanf("%d",&n);for(i = n;; i++){if(is_perfect(i)){printf("%d",i);break;}}return 0;
}
R7-4 h0034. 平方矩阵 II
输入整数N,输出一个N阶的二维数组。
数组的形式参照样例。
输入格式:
输入包含多行,每行包含一个整数N。0≤N≤100
当输入行为N=0时,表示输入结束,且该行无需作任何处理。
输出格式:
对于每个输入整数N,输出一个满足要求的N阶二维数组。
每个数组占N行,每行包含N个用空格隔开的整数。
每个数组输出完毕后,输出一个空行。
输入样例:
1
2
3
4
5
0
输出样例:
1 1 2
2 1 1 2 3
2 1 2
3 2 1 1 2 3 4
2 1 2 3
3 2 1 2
4 3 2 1 1 2 3 4 5
2 1 2 3 4
3 2 1 2 3
4 3 2 1 2
5 4 3 2 1
代码如下:(十分感谢qzjhjxj的博客_CSDN博客-领域博主提供思路与解答)
#include <stdio.h>
#include <stdlib.h>
int arr[101][101];
void Init()
{int i, j;for (i = 0; i <= 100; i++)for (j = 0; j <= 100; j++)arr[i][j] = abs(i - j) + 1;
}
int main()
{int i, j, n;Init();while (scanf("%d", &n) == 1 && n != 0){for (i = 0; i < n; i++){for (j = 0; j < n; j++)printf("%d ", arr[i][j]);printf("\n");}printf("\n");}
}
R7-5 选夫婿^_^
倾国倾城的大家闺秀潘小姐要选夫婿啦!武林中各门各派,武林外各大户人家,闻讯纷纷前来,强势围观。前来参与竞选的男生藏龙卧虎,高手云集,才子遍布,帅哥纷纭,更不乏富二代,官二代,可谓声势空前。
每个人参与竞选的帅哥除了进行一段激情洋溢的求婚演讲以外,还要报上自己姓名、身高和体重,以及个人简历。最后再进行文武选拔,最后夺魁者方能得到潘小姐的芳心。
潘小姐不爱名利,只看人,第一关就是身高和体重要合格,即必须在其要求的范围内,否则直接排除在外,不允许参加下一轮的选拔。
作为一个程序员,你没有钱也没有权,擅长的也就是编程了。潘小姐也发现了这一点,所以把首轮根据身高体重进行选拔的任务交给了你,如果完成的好,你可以直接进入下一轮选拔,你笑了。
输入格式:
潘小姐给你了所有报名男生的信息。输入数据的第一行是一个正整数N(0 < N < 1000)。然后N行数据,每行包含三部分,用空格隔开。第一部分是报名者的姓名name(长度小于20的字符串),然后是整数身高h(0 < h < 300),第三部分是整数体重w (0 < w < 200)。
最后一行是四个整数a,b,c,d.表示身高的合格范围是[a,b],体重的合格范围是[c,d](0 < a < b < 200, 0 < c < d < 300)。
输出格式:
你需要把合格的男生信息按照身高从低到高输出,格式跟输入一样,也是每行三个信息,共N行,如果身高相同则按体重从轻到重输出,如果身高相同并且体重相同则按照输入顺序依次输出,若没有合格人选则输出NO,具体格式见样例。
输入样例:
8
武大郎 70 40
西门庆 180 70
李逵 160 150
燕青 175 69
鲁智深 180 100
武松 180 75
小泉纯一狼 30 20
孙二娘 169 60
165 190 60 90
输出样例:
孙二娘 169 60
燕青 175 69
西门庆 180 70
武松 180 75
代码如下:
#include <stdio.h>
#include <string.h>
struct man
{char name[25];int h;int w;
}m[999], t;int main()
{int n, i, j, a, b, c, d, flag = 0;scanf("%d", &n);for (i = 0; i < n; i++){scanf("%s %d %d", m[i].name, &m[i].h, &m[i].w);}scanf("%d %d %d %d", &a, &b, &c, &d);for (i = 0; i < n - 1; i++)for (j = 0; j < n - i - 1; j++){if (m[j].h > m[j + 1].h){t = m[j];m[j] = m[j + 1];m[j + 1] = t;}else if (m[j].h == m[j + 1].h){if (m[j].w > m[j + 1].w){t = m[j];m[j] = m[j + 1];m[j + 1] = t;}}}for (i = 0; i < n; i++){if(m[i].h >= a && m[i].h <= b && m[i].w >= c && m[i].w <= d){printf("%s %d %d\n", m[i].name, m[i].h, m[i].w);flag = 1;}}if (flag == 0)printf("NO\n");return 0;
}
R7-6 一帮一
“一帮一学习小组”是中小学中常见的学习组织方式,老师把学习成绩靠前的学生跟学习成绩靠后的学生排在一组。本题就请你编写程序帮助老师自动完成这个分配工作,即在得到全班学生的排名后,在当前尚未分组的学生中,将名次最靠前的学生与名次最靠后的异性学生分为一组。
输入格式:
输入第一行给出正偶数N
(≤50),即全班学生的人数。此后N
行,按照名次从高到低的顺序给出每个学生的性别(0代表女生,1代表男生)和姓名(不超过8个英文字母的非空字符串),其间以1个空格分隔。这里保证本班男女比例是1:1,并且没有并列名次。
输出格式:
每行输出一组两个学生的姓名,其间以1个空格分隔。名次高的学生在前,名次低的学生在后。小组的输出顺序按照前面学生的名次从高到低排列。
输入样例:
8
0 Amy
1 Tom
1 Bill
0 Cindy
0 Maya
1 John
1 Jack
0 Linda
输出样例:
Amy Jack
Tom Linda
Bill Maya
Cindy John
代码如下:
#include <stdio.h>
#include <string.h>struct student
{int sex;char name[9];
}stu[50];int main()
{int n, i, j;scanf("%d", &n);for (i = 0; i < n; i++)scanf("%d %s", &stu[i].sex, &stu[i].name);for (i = 0; i < n; i++)for (j = n - 1; j >= i; j--){if (stu[i].sex != stu[j].sex && stu[j].sex != -1){printf("%s %s\n", stu[i].name, stu[j].name);stu[j].sex = -1;break;}}return 0;
}
R7-7 猜数字*
在下面的算式中,被乘数的 4 位数字 a、b、c、d 各不相同。
显然 a、d都不为0。
请编写程序,输入 x,若存在满足条件的算式,则按被乘数由小到大的顺序输出全部答案,否则输出“None”。
要求:程序不断输入不同的乘数 x,然后输出对应的结果,直到输入 0 为止。
输入样例
5
4
1
0
输出样例
None
2178 * 4 = 8712
None
代码如下:
#include <stdio.h>
#include <string.h>
int main()
{int n, a, b, c, d, i, sum;while (1){scanf("%d", &n);if (n == 0)break;int flag = 0;for (i = 1000; i < 10000; i++){d = i % 10; c = i / 10 % 10; b = i / 100 % 10; a = i / 1000 % 10;sum = d*1000+c*100+b*10+a;if (i * n == sum){if (a != b && a != c && a != d && b != c && b != d && c != d){printf("%d * %d = %d\n", i, n, sum);flag = 1;}}}if (flag == 0)printf("None\n");}
}
R7-8 h0105. 弟弟的作业
你的弟弟刚做完了“100以内数的加减法”这部分的作业,请你帮他检查一下。每道题目(包括弟弟的答案)的格式为a+b=c或者a-b=c,其中a和b是作业中给出的,均为不超过100的非负整数;c是弟弟算出的答案,可能是不超过200的非负整数,也可能是单个字符"?",表示他不会算。
输入格式:
输入文件包含不超过100行,以文件结束符结尾。每行包含一道题目,格式保证符合上述规定,且不包含任何空白字符。输入的所有整数均不含前导0。
输出格式:
输出仅一行,包含一个非负整数,即弟弟答对的题目数量。
输入样例:
1+2=3
3-1=5
6+7=?
99-0=99
输出样例:
2
代码如下:
#include<stdio.h>
#include<string.h>
int main()
{int a, b, d, sum = 0, len;char s, c[4];while(scanf("%d%c%d=%s", &a, &s, &b, c) != EOF){len = strlen(c);if(c[0] != '?'){ if(len == 1)d = c[0]-'0';if(len == 2)d = (c[0]-'0')*10 + c[1]-'0';if(len == 3)d = (c[0]-'0')*100 + (c[1]-'0')*10 + c[2]-'0';if(s == '+'){if(a+b == d)sum++;}if(s == '-'){if(a-b == d)sum++;}}}printf("%d\n",sum);return 0;
}
R7-9 一维数组最大值和最小值交换
找出含有10个元素一维数组中的最大值和最小值,并互换这两个数的位置。
输入格式:
在一行中输入10个整数,数据之间只能用1个空格间隔。
输出格式:
在一行中按照“max=最大值,min=最小值”的格式输出结果,最大值和最小值均原样输出,没有列宽控制。
在下一行中输出交换完最大值和最小值的一维数组,每个数据输出占5列。
输入样例:
6 5 1 2 3 4 8 9 7 5
输出样例:
max=9,min=16 5 9 2 3 4 8 1 7 5
代码如下:
#include <stdio.h>
#include <string.h>
int main()
{int i, t, m, n, a[99], max = -99, min = 99;for (i = 0; i < 10; i++){scanf("%d", &a[i]);}for (i = 0; i < 10; i++){if (max < a[i]){max = a[i];m = i;}if (min > a[i]){min = a[i];n = i;}}t = a[m]; a[m] = a[n]; a[n] = t;printf("max=%d,min=%d\n", max, min);for (i = 0; i < 10; i++)printf("%5d", a[i]);return 0;
}
R7-10 打印九九口诀表
下面是一个完整的下三角九九口诀表:
1*1=1
1*2=2 2*2=4
1*3=3 2*3=6 3*3=9
1*4=4 2*4=8 3*4=12 4*4=16
1*5=5 2*5=10 3*5=15 4*5=20 5*5=25
1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36
1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49
1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64
1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81
本题要求对任意给定的一位正整数N
,输出从1*1
到N*N
的部分口诀表。
输入格式:
输入在一行中给出一个正整数N
(1≤N
≤9)。
输出格式:
输出下三角N*N
部分口诀表,其中等号右边数字占4位、左对齐。
输入样例:
4
输出样例:
1*1=1
1*2=2 2*2=4
1*3=3 2*3=6 3*3=9
1*4=4 2*4=8 3*4=12 4*4=16
代码如下:
#include <stdio.h>
#include <string.h>
int main()
{int n, i, j;scanf("%d", &n);for (i = 1; i <= n; i++){for (j = 1; j <= i; j++){printf("%d*%d=%-4d",j, i, i*j);}printf("\n");}return 0;
}
R7-11 乒乓球赛轮次
校工会正计划举行一场全校教职员工的乒乓球赛。在每一轮比赛中,参赛者都是两两比赛,输者淘汰,赢者将进入下一轮。比赛一直进行到只剩下一个人为止,这个人就是冠军。在每一轮比赛中,如果比赛人数不是偶数,那么将随机选择一个参赛者自动晋级到下一轮比赛中,而其他人则还是捉对厮杀。主办方想知道产生冠军总共需要安排多少轮比赛?
输入格式:
输入数据首先包含一个整数T,表示测试实例的个数,然后是T行测试数据。每行包括1个正整数n(1<=n<=10^9),代表参赛的总人数。这里,10^9表示10的9次方。
输出格式:
对于每个测试,在一行上输出比赛所需要的总轮数。
输入样例:
4
8
777
15
100
输出样例:
3
10
4
7
代码如下:
#include <stdio.h>
#include <string.h>
int func(int n)
{int count = 0, a = 2;while (n != 1){if (n % 2 == 0){n /= 2;count++;}else{n = (n - 1) / 2;n += 1;count++;}}return count;
}int main()
{int n, m;scanf("%d", &n);while (n--){scanf("%d", &m);printf("%d\n", func(m));}return 0;
}
R7-12 有理数加法
本题要求编写程序,计算两个有理数的和。
输入格式:
输入在一行中按照a1/b1 a2/b2
的格式给出两个分数形式的有理数,其中分子和分母全是整形范围内的正整数。
输出格式:
在一行中按照a/b
的格式输出两个有理数的和。注意必须是该有理数的最简分数形式,若分母为1,则只输出分子。
输入样例1:
1/3 1/6
输出样例1:
1/2
输入样例2:
4/3 2/3
输出样例2:
2
代码如下:
#include <stdio.h>
#include <string.h>
int gcd(int m, int n)
{int t;while (n){t = m % n;m = n; n = t;}return m;
}int main()
{int x1, y1, x2, y2, i, a, b;scanf("%d/%d", &x1, &y1);scanf("%d/%d", &x2, &y2);a = x1 * y2 + x2 * y1;b = y1 * y2;if (a % b == 0)printf("%d", a / b);else{i = gcd(a, b);a /= i;b /= i;printf("%d/%d", a, b);}return 0;
}
R7-13 万万没想到之还是没想到
大家好,我不是王大锤,万万没想到转眼已经在公司工作了50年,在临终前我再次见到了上帝,上帝又带来了问题,让我计算1到n的平方和,如n=3,则平方和为1^2+2^2+3^2=14。如果我能解决这个问题,用不了多久,我就能升值加薪,当上总经理,出任CEO,迎娶白富美,走上人生巅峰,呵呵,想想还有点小激动(丫的,还有完没完)。聪明的ACMer,你能不能帮我计算出这是个数的和呢?
输入格式:
第一行输入一个n,n小于45
输出格式:
输出平方和,每个和占一行。
输入样例:
在这里给出一组输入。例如:
3
输出样例:
在这里给出相应的输出。例如:
14
代码如下:(注意while(scanf("%d",&n) != EOF)要的是“一组”数据)
#include <stdio.h>
#include <string.h>
#include <math.h>
int func(int n)
{int sum = 0;while(n){sum += pow(n, 2);n--;}return sum;
}int main()
{int n;while(scanf("%d",&n) != EOF){printf("%d\n", func(n));}return 0;
}
R7-14 到底是不是太胖了
据说一个人的标准体重应该是其身高(单位:厘米)减去100、再乘以0.9所得到的公斤数。真实体重与标准体重误差在10%以内都是完美身材(即 | 真实体重 − 标准体重 | < 标准体重×10%)。已知市斤是公斤的两倍。现给定一群人的身高和实际体重,请你告诉他们是否太胖或太瘦了。
输入格式:
输入第一行给出一个正整数N
(≤ 20)。随后N
行,每行给出两个整数,分别是一个人的身高H
(120 < H < 200;单位:厘米)和真实体重W
(50 < W ≤ 300;单位:市斤),其间以空格分隔。
输出格式:
为每个人输出一行结论:如果是完美身材,输出You are wan mei!
;如果太胖了,输出You are tai pang le!
;否则输出You are tai shou le!
。
输入样例:
3
169 136
150 81
178 155
输出样例:
You are wan mei!
You are tai shou le!
You are tai pang le!
代码如下:
#include<stdio.h>
#include<math.h>
int main()
{int N, i, H, W, z;scanf("%d",&N);for(i = 1; i <= N; i++){scanf("%d%d",&H,&W);z = (H-100)*1.8;if(fabs(z-W) < (z*0.1))printf("You are wan mei!\n");else if(z > W)printf("You are tai shou le!\n");else printf("You are tai pang le!\n");}}
【PTA】【C语言】复盘练习——编程题相关推荐
- 分析编程题c语言,二级C语言部分上机编程题详细分析
<二级C语言部分上机编程题详细分析>由会员分享,可在线阅读,更多相关<二级C语言部分上机编程题详细分析(6页珍藏版)>请在人人文库网上搜索. 1.二级C语言部分上机编程题详细分 ...
- c语言编程题库this is a c program,C语言末复习题编程题部.doc
C语言末复习题编程题部.doc 编程题目 1.在考生目录下,要求程序 PROG1.C 的功能是 按下面公式的前 1000 项,求的近似值 2 2 4 4 6 6 8 8 2n 2n * * * * * ...
- c语言第一次作业程序题pta,c语言第一次作业程序题pta
c语言第一次作业程序题pta 5-1 统计学生平均成绩与及格人数 (15 分)本题要求编写程序,计算学生们的平均成绩,并统计及格(成绩不低于 60 分)的人数.题目保证输入与输出均在整型范围内.输入格 ...
- MOOC 苏小红C语言 第四周编程题
点我查看MOOC苏小红C语言程序设计精髓所有编程题 目录 1.检测用户错误输入(4分) 2.闰年判断(6分) 3.程序改错v1.0(7分) 4.字符类型判断(4分) 5.快递费用计算(7分) 6.数位 ...
- 大一下c语言期末考试编程题,大一上期末C语言编程题
大一上期末C语言编程题 (6页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 11.90 积分 用公式 π/4 = 1-1/3+1/5-1/7--,编程序 ...
- 全国计算机二级编程题100道,计算机二级C语言100道编程题
国家计算机二级100道编程题 #include #include int fun(int score[], int m, int below[]) { int i,k=0; float av=0.0; ...
- 翁恺-C语言3.0编程题
第二周的课程学完了,但是习题网站已关闭了,在第三周课程中 PAT解释中有三道编程相关的题目 交作业啦!坚持go go go 注:int型 printf和scanf中为%d, double型 ...
- C 语言解 常见编程题
目录 文章目录 目录 常见编程题各解法 0 交换值 1 累计和 2 Fibonacci 数列 ① 第N项 / 前N项 ② 前N项和 3 水仙花数 4 最大公约数与最小公倍数 5 完数 6 N的阶乘 ① ...
- PTA浙大版《C语言程序设计》编程题,练习2-1到习题2-6答案
个人建议 初学者还是把格式规范起来,自己读起来既方便又美观 PTA对结果的格式要求很严格,答题的时候注意题目要求 练习2-1 Programming in C is fun! (5 分) 本题要求编写 ...
最新文章
- 深度学习:知识回收(Lecture3+4 PLA+Decision Tree)
- 初始化方法-使用参数设置属性初始值
- phpcms2008常用函数
- seata实现分布式事务解决方案
- fso封装类可以用仿dos命令操作文件
- 数据库系统由计算机硬件软件,集美大学计算机工程学院数据库软件04B卷答案.doc...
- python 3d重建_三维人脸重建(一)——Python读取obj文件
- NHK SHV 的 22.2 声道音频系统
- 《Ray Tracing in One Weekend》——Chapter 5: Surface normals and multiple objects
- 沧小海基于xilinx srio核的学习笔记之第三章 xilinx srio核介绍(二)HELLO格式和流控
- B2C电商项目(第八天、用户认证、单点登录、Oauth2认证、项目认证开发、认证服务对接网关、登录页、SpringSecurity 权限控制)
- java制作闪星星,原生js实现星星闪烁效果
- 设置Mathtype的粗斜体
- 最彻底的玩客云绝育方法-避免持续读写损伤硬盘和资料
- body 没有被撑开_div层为什么没有被自动撑开
- ST7703 LCM显示屏调试--基于MT6765
- 1 根文件系统 简单来说,(根文件系统)
- 【文献调研】三相DLMP的motivation调研
- Vert.x(vertx) Web开发-路由
- graphql 嵌套查询_了解GraphQL中的查询