《算法竞赛入门经典》习题答案 -- Chapter II
2012-05-25 15:27
204 查看
习题2-1 位数(digit)
题目:输入一个不超过10的9次方的正整数,输出它的位数,例如12735的位数是5。不使用任何数学函数。
分析:主要是考察循环的使用,while循环和for循环均可,择其一。
程序:
C语言:
Codee#26555
01 #include <stdio.h>
02
03 int
main()
04 {
05 int
i = 0;
06 long
long n =
0;
07
08 scanf("%ld",
&n);
09 for (i
= 1;
i <= 9;
i++)
10 {
11 if (n
< 10)
12 {
13 break;
14 }
15 n = n
/ 10;
16 }
17 printf("%d\n",
i);
18
19 return
0;
20
21 }
习题2-2 水仙花数(daffodil)
题目:输出100 ~ 999中的所有水仙花数,若3位数ABC满足ABC = A ^ 3 + B ^ 3 + C ^ 3(书中题目有误,均写成了平方),则称其为水仙花数。
分析:在数论中,水仙花数(Narcissistic number)也称为自恋数、自幂数或阿姆斯壮数(Armstrong number)是指一N位数,其各个数之N次方和等于该数。题目只考察了三位数这种情况。
程序:
C语言:
Codee#26556
01 #include <stdio.h>
02
03 int
main()
04 {
05 int
i = 0;
/* centesimal */
06 int
j = 0;
/* ten */
07 int
k = 0;
/* digit */
08 int
num = 0;
09
10 for (i
= 1;
i <= 9;
i++)
11 {
12 for (j
= 1;
j <= 9;
j++)
13 {
14 for (k
= 1;
k <= 9;
k++)
15 {
16
num = i
* 100
+ j *
10 +
k;
17
if (num ==
i *
i * i
+ j
* j *
j +
k * k
* k)
18
{
19
printf("%d\n",
num);
20
}
21 }
22 }
23 }
24
25 return
0;
26 }
习题2-3 韩信点兵(hanxin)
题目:韩信才智过人,从不直接清点自己军队的人数,只要让士兵先后以三人一排、五人一排、七人一排地变换队形,而他每次都只是掠一眼队伍的排位就知道人数了。输入3个非负整数a,b,c,表示每种队形排尾的人数,输出总人数的最小值(或报告无解)。已知总人数不小于10,不超过100
分析:韩信点兵问题渊源颇深,且题目的难度变化非常大。题目出的,是最简单的一种了。程序中要注意对于无解这种情况的判断
程序:
C语言:
Codee#26557
01 #include <stdio.h>
02
03 int
main()
04 {
05 int
a = 0;
06 int b
= 0;
07 int
c = 0;
08 int
i = 0;
09 int
flag = 0;
10
11 scanf("%d %d %d",
&a,
&b,
&c);
12
13 /* check input numbers */
14 if ((a
>= 3) || (b
>= 5) || (c
>= 7) )
15 {
16 printf("No answer.\n");
17 return
0;
18 }
19
20 for (i
= 10;
i <= 100;
i++)
21 {
22 if ((i
% 3
== a) && (i
% 5
== b) && (i
% 7
== c))
23 {
24 printf("%d\n",
i);
25 flag
= 1;
26 }
27 }
28
29 /* does not got the answer */
30 if (flag
== 0)
31 {
32 printf("No answer.\n");
33 }
34
35 return
0;
36 }
习题 2-4 倒三角形(triangle)
题目:输入正整数n<=20,输出一个n层的倒三角形。
分析:比较经典的循环问题了,注意空格和#的比例
程序:
C语言:
Codee#26558
01 #include <stdio.h>
02
03 int
main()
04 {
05 int
i = 0;
06 int
j = 0;
07 int
k = 0;
08 int n
= 0;
09
10 scanf("%d",
&n);
11 for (i
= n; i
> 0; i--)
12 {
13 /* print space */
14 for (k
= 0;
k < n -
i; k++)
15 {
16 printf(" ");
17 }
18
19 /* print # */
20 for (j
= 0;
j < 2
* i
- 1; j++)
21 {
22 printf("#");
23 }
24
25 printf("\n");
26 }
27
28 return
0;
29 }
习题 2-5 统计(stat)
题目:输入一个正整数n,然后读取n个正整数a1, a2, a3...,an,最后再读取一个正整数m。统计数列中多少个正整数的值小于m。
分析:程序不难,使用了数组,这本是在第三章介绍的内容。我之所以这么做是因为网上广泛流传的答案都不太厚道。
程序:
C语言:
Codee#26559
01 #include <stdio.h>
02
03 #define MAX_LEN 100 + 10
04
05 int
main()
06 {
07 int
i = 0;
08 int n
= 0;
09 int
m = 0;
10 int
counter = 1;
11 int
a[MAX_LEN]
= {0};
12 FILE
*pfile
= NULL;
13
14 pfile
= fopen("data.in",
"rb");
15
16 scanf("%d",
&n);
17 for (i
= 0;
i < n; i++)
18 {
19 fscanf(pfile,
"%d",
&a[i]);
20 }
21 fscanf(pfile,
"%d",
&m);
22
23 for (i
= 0;
i < n; i++)
24 {
25 if (a[i]
< m)
26 {
27 counter++;
28 }
29 }
30
31 fclose(pfile);
32 pfile
= NULL;
33
34 printf("%d\n",
counter);
35
36 return
0;
37 }
题目:输入一个不超过10的9次方的正整数,输出它的位数,例如12735的位数是5。不使用任何数学函数。
分析:主要是考察循环的使用,while循环和for循环均可,择其一。
程序:
C语言:
Codee#26555
01 #include <stdio.h>
02
03 int
main()
04 {
05 int
i = 0;
06 long
long n =
0;
07
08 scanf("%ld",
&n);
09 for (i
= 1;
i <= 9;
i++)
10 {
11 if (n
< 10)
12 {
13 break;
14 }
15 n = n
/ 10;
16 }
17 printf("%d\n",
i);
18
19 return
0;
20
21 }
习题2-2 水仙花数(daffodil)
题目:输出100 ~ 999中的所有水仙花数,若3位数ABC满足ABC = A ^ 3 + B ^ 3 + C ^ 3(书中题目有误,均写成了平方),则称其为水仙花数。
分析:在数论中,水仙花数(Narcissistic number)也称为自恋数、自幂数或阿姆斯壮数(Armstrong number)是指一N位数,其各个数之N次方和等于该数。题目只考察了三位数这种情况。
程序:
C语言:
Codee#26556
01 #include <stdio.h>
02
03 int
main()
04 {
05 int
i = 0;
/* centesimal */
06 int
j = 0;
/* ten */
07 int
k = 0;
/* digit */
08 int
num = 0;
09
10 for (i
= 1;
i <= 9;
i++)
11 {
12 for (j
= 1;
j <= 9;
j++)
13 {
14 for (k
= 1;
k <= 9;
k++)
15 {
16
num = i
* 100
+ j *
10 +
k;
17
if (num ==
i *
i * i
+ j
* j *
j +
k * k
* k)
18
{
19
printf("%d\n",
num);
20
}
21 }
22 }
23 }
24
25 return
0;
26 }
习题2-3 韩信点兵(hanxin)
题目:韩信才智过人,从不直接清点自己军队的人数,只要让士兵先后以三人一排、五人一排、七人一排地变换队形,而他每次都只是掠一眼队伍的排位就知道人数了。输入3个非负整数a,b,c,表示每种队形排尾的人数,输出总人数的最小值(或报告无解)。已知总人数不小于10,不超过100
分析:韩信点兵问题渊源颇深,且题目的难度变化非常大。题目出的,是最简单的一种了。程序中要注意对于无解这种情况的判断
程序:
C语言:
Codee#26557
01 #include <stdio.h>
02
03 int
main()
04 {
05 int
a = 0;
06 int b
= 0;
07 int
c = 0;
08 int
i = 0;
09 int
flag = 0;
10
11 scanf("%d %d %d",
&a,
&b,
&c);
12
13 /* check input numbers */
14 if ((a
>= 3) || (b
>= 5) || (c
>= 7) )
15 {
16 printf("No answer.\n");
17 return
0;
18 }
19
20 for (i
= 10;
i <= 100;
i++)
21 {
22 if ((i
% 3
== a) && (i
% 5
== b) && (i
% 7
== c))
23 {
24 printf("%d\n",
i);
25 flag
= 1;
26 }
27 }
28
29 /* does not got the answer */
30 if (flag
== 0)
31 {
32 printf("No answer.\n");
33 }
34
35 return
0;
36 }
习题 2-4 倒三角形(triangle)
题目:输入正整数n<=20,输出一个n层的倒三角形。
分析:比较经典的循环问题了,注意空格和#的比例
程序:
C语言:
Codee#26558
01 #include <stdio.h>
02
03 int
main()
04 {
05 int
i = 0;
06 int
j = 0;
07 int
k = 0;
08 int n
= 0;
09
10 scanf("%d",
&n);
11 for (i
= n; i
> 0; i--)
12 {
13 /* print space */
14 for (k
= 0;
k < n -
i; k++)
15 {
16 printf(" ");
17 }
18
19 /* print # */
20 for (j
= 0;
j < 2
* i
- 1; j++)
21 {
22 printf("#");
23 }
24
25 printf("\n");
26 }
27
28 return
0;
29 }
习题 2-5 统计(stat)
题目:输入一个正整数n,然后读取n个正整数a1, a2, a3...,an,最后再读取一个正整数m。统计数列中多少个正整数的值小于m。
分析:程序不难,使用了数组,这本是在第三章介绍的内容。我之所以这么做是因为网上广泛流传的答案都不太厚道。
程序:
C语言:
Codee#26559
01 #include <stdio.h>
02
03 #define MAX_LEN 100 + 10
04
05 int
main()
06 {
07 int
i = 0;
08 int n
= 0;
09 int
m = 0;
10 int
counter = 1;
11 int
a[MAX_LEN]
= {0};
12 FILE
*pfile
= NULL;
13
14 pfile
= fopen("data.in",
"rb");
15
16 scanf("%d",
&n);
17 for (i
= 0;
i < n; i++)
18 {
19 fscanf(pfile,
"%d",
&a[i]);
20 }
21 fscanf(pfile,
"%d",
&m);
22
23 for (i
= 0;
i < n; i++)
24 {
25 if (a[i]
< m)
26 {
27 counter++;
28 }
29 }
30
31 fclose(pfile);
32 pfile
= NULL;
33
34 printf("%d\n",
counter);
35
36 return
0;
37 }
相关文章推荐
- 算法竞赛入门经典(第2版)习题3-6 纵横字谜的答案 Crossword Answers UVa232
- 算法竞赛入门经典第一章习题答案
- 算法竞赛入门经典 第2章 习题答案
- 算法竞赛入门经典 第3章 习题答案
- 《算法竞赛入门经典》习题答案 -- Chapter I
- 算法竞赛入门经典 习题2答案
- 算法竞赛入门经典(第2版)习题4-2 正方形UVa201
- 《C++程序设计原理与实践》部分习题答案 2
- 《笨办法学python》加分习题21——我的答案
- 微机原理及应用习题库与答案
- 《算法竞赛入门经典》第2章习题总结
- 《算法竞赛入门经典》第三章习题3-3
- 《算法竞赛入门经典》第三章习题3-4
- 操作系统习题(有答案)
- 02 快学scala第二章习题答案
- 鸟哥的基础学习-习题与答案
- 80X86 汇编语言程序设计(杨季文)习题答案 习题3-23
- 鸟哥的linux私房菜基础学习篇课后习题与答案 第四章
- 【深度学习:21 天实战 Caffe】课后习题参考答案
- 计算机网络谢希仁课后习题答案