目录
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 到底是不是太胖了
输入格式:
输出格式:
输入样例:
输出样例:
完全数,指所有的真因子(即除了自身以外的约数)的和,恰好等于它本身。本题目要求读入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
#include
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;
}
编程输入一个不小于6的正整数N(N<99999999),输出它是不是完全数。真约数之和恰好等于它本身的数是完全数。
28
YES
100
NO
代码如下:
#include
#include
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");
else
printf("NO");
return 0;
}
编写函数返回形式参数(一个正整数)是否为完全数。主函数功能为:输入一个整数N(N<5000),输出不小于N的第一个完全数。
20
28
100
496
代码如下:
#include
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;
}
输入整数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
#include
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");
}
}
倾国倾城的大家闺秀潘小姐要选夫婿啦!武林中各门各派,武林外各大户人家,闻讯纷纷前来,强势围观。前来参与竞选的男生藏龙卧虎,高手云集,才子遍布,帅哥纷纭,更不乏富二代,官二代,可谓声势空前。
每个人参与竞选的帅哥除了进行一段激情洋溢的求婚演讲以外,还要报上自己姓名、身高和体重,以及个人简历。最后再进行文武选拔,最后夺魁者方能得到潘小姐的芳心。
潘小姐不爱名利,只看人,第一关就是身高和体重要合格,即必须在其要求的范围内,否则直接排除在外,不允许参加下一轮的选拔。
作为一个程序员,你没有钱也没有权,擅长的也就是编程了。潘小姐也发现了这一点,所以把首轮根据身高体重进行选拔的任务交给了你,如果完成的好,你可以直接进入下一轮选拔,你笑了。
潘小姐给你了所有报名男生的信息。输入数据的第一行是一个正整数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
#include
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;
}
“一帮一学习小组”是中小学中常见的学习组织方式,老师把学习成绩靠前的学生跟学习成绩靠后的学生排在一组。本题就请你编写程序帮助老师自动完成这个分配工作,即在得到全班学生的排名后,在当前尚未分组的学生中,将名次最靠前的学生与名次最靠后的异性学生分为一组。
输入第一行给出正偶数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
#include
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;
}
在下面的算式中,被乘数的 4 位数字 a、b、c、d 各不相同。
显然 a、d都不为0。
请编写程序,输入 x,若存在满足条件的算式,则按被乘数由小到大的顺序输出全部答案,否则输出“None”。
要求:程序不断输入不同的乘数 x,然后输出对应的结果,直到输入 0 为止。
5
4
1
0
None
2178 * 4 = 8712
None
代码如下:
#include
#include
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");
}
}
你的弟弟刚做完了“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
#include
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;
}
找出含有10个元素一维数组中的最大值和最小值,并互换这两个数的位置。
在一行中输入10个整数,数据之间只能用1个空格间隔。
在一行中按照“max=最大值,min=最小值”的格式输出结果,最大值和最小值均原样输出,没有列宽控制。
在下一行中输出交换完最大值和最小值的一维数组,每个数据输出占5列。
6 5 1 2 3 4 8 9 7 5
max=9,min=1
6 5 9 2 3 4 8 1 7 5
代码如下:
#include
#include
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;
}
下面是一个完整的下三角九九口诀表:
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
#include
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;
}
校工会正计划举行一场全校教职员工的乒乓球赛。在每一轮比赛中,参赛者都是两两比赛,输者淘汰,赢者将进入下一轮。比赛一直进行到只剩下一个人为止,这个人就是冠军。在每一轮比赛中,如果比赛人数不是偶数,那么将随机选择一个参赛者自动晋级到下一轮比赛中,而其他人则还是捉对厮杀。主办方想知道产生冠军总共需要安排多少轮比赛?
输入数据首先包含一个整数T,表示测试实例的个数,然后是T行测试数据。每行包括1个正整数n(1<=n<=10^9),代表参赛的总人数。这里,10^9表示10的9次方。
对于每个测试,在一行上输出比赛所需要的总轮数。
4
8
777
15
100
3
10
4
7
代码如下:
#include
#include
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;
}
本题要求编写程序,计算两个有理数的和。
输入在一行中按照a1/b1 a2/b2
的格式给出两个分数形式的有理数,其中分子和分母全是整形范围内的正整数。
在一行中按照a/b
的格式输出两个有理数的和。注意必须是该有理数的最简分数形式,若分母为1,则只输出分子。
1/3 1/6
1/2
4/3 2/3
2
代码如下:
#include
#include
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;
}
大家好,我不是王大锤,万万没想到转眼已经在公司工作了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
#include
#include
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;
}
据说一个人的标准体重应该是其身高(单位:厘米)减去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
#include
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");
}
}