C语言简单练习题|循环穷举

做几道简单的C语言题。

(1)

求出 1! + 2! + 3! +…+n!;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
 #include <stdio.h>

int nF (int n);
int plus_nF(int n);

int main(void)
{
printf("%d\n", plus_nF(10));

return 0;
}
/*把N个n的阶乘加起来*/
int plus_nF(int n)
{
int result = 0;

for (int i = 1; i <= n; i++ ) {
result = result + nF(i);
}

return result;
}
/*求N阶乘函数*/
int nF (int n)
{
int r = 1;

for (int i = 1; i <= n; i++) {
r = r * i;
}

return r;
}

输出:

1
4037913

(2)

求出用 50 元,20 元, 10 元换算成 100 元的有几种方式?

for循环穷举法:

1
2
3
4
5
6
7
8
9
for (int i = 0; i <= 100 / 50; i++) {
for (int j = 0; j <= 100 / 20; j++) {
for (int k = 0; k <= 100 / 10; k++) {
if ( i * 50 + j * 20 + k * 10 == 100 ) {
printf ("%d张50元|%d张20元|%d张10元。\n", i, j, k);
}
}
}
}

输出:

1
2
3
4
5
6
7
8
9
10
0张50元|0张20元|10张10元。
0张50元|1张20元|8张10元。
0张50元|2张20元|6张10元。
0张50元|3张20元|4张10元。
0张50元|4张20元|2张10元。
0张50元|5张20元|0张10元。
1张50元|0张20元|5张10元。
1张50元|1张20元|3张10元。
1张50元|2张20元|1张10元。
2张50元|0张20元|0张10元。

(3)

百钱买百鸡,公鸡 5 元一只,母鸡 3 元一只,小鸡 1 元 3 只。百钱买百鸡的有哪些情况?

依然穷举法。

1
2
3
4
5
6
for (int i = 0; i < 100 / 5; i++) {
for (int j = 0; j < (int) ( 100 / 3); j ++) {
if ( (100 - i - j) % 3 == 0 && i * 5 + j * 3 + (100 - i - j) / 3 == 100 )
printf("公鸡%d只|母鸡%d只|小鸡%d只\n", i, j, 100 - i - j);
}
}

输出:

1
2
3
4
公鸡0只|母鸡25只|小鸡75只
公鸡4只|母鸡18只|小鸡78只
公鸡8只|母鸡11只|小鸡81只
公鸡12只|母鸡4只|小鸡84只

(4)

求出 1,2,3,4四个数能组成哪些互不相同的三位数?

依然穷举法。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
int a = 1, b = 2, c = 3, d = 4;
int arr[4] = {a, b, c, d};

int count = 0;
for (int i = 0; i < 4; i++)
{
for (int j = 0; j < 4; j++) {
for (int k = 0; k < 4; k++) {
if (i != j && i != k && j != k) {
printf("%d%d%d\t", arr[i], arr[j], arr[k]);
count++;
if (count % 5 == 0) {
printf("\n");
}
}
}
}
}

输出:

1
2
3
4
5
123     124     132     134     142
143 213 214 231 234
241 243 312 314 321
324 341 342 412 413
421 423 431 432

题目来自《手把手教你学C语言》。



参考:
1.《手把手教你学C语言》

感谢支持!