c语言将1,2,······,9共9个数排成下列形态的三角形。 a b c d e f g h i 其中:a~i分别表示1,2,······,9中的一个数字,并要求同时满足下列条件: (1)a<f<i; (2)b<d, g<h, c<e (3)a+b+d+f=f+g+h+i=i+e+c+a=P 要求: 根据输入的边长之和P 输出所有满足上述条件的三角形的个数
时间: 2023-07-16 07:12:06 浏览: 206
C语言输入三个正整数a, b, c. 若此三数构成三角形,则输出三角形面积
这是一道经典的破译密码题目,可以用穷举法来解决。
首先,我们可以在程序中设置一个循环,枚举 $a$ 的取值范围,即 $a$ 可以从 $1$ 到 $9-5=4$ 循环。接着,我们可以在循环中再设置一个循环,枚举 $f$ 的取值范围,即 $f$ 可以从 $a+1$ 到 $9-2=7$ 循环。这样,我们就可以保证条件 (1) 中的 $a<f<i$ 被满足了。
接下来,我们再枚举 $b$,$c$,$d$,$e$,$g$ 和 $h$ 的取值范围,分别满足条件 (2) 中的 $b<d, g<h, c<e$。这里我们需要注意,由于 $a$,$d$,$f$ 和 $i$ 的和等于 $P$,所以我们可以根据 $a$ 和 $f$ 的取值推出 $P$,然后在枚举 $b$,$c$,$d$,$e$,$g$ 和 $h$ 的取值范围时,需要满足 $b+d+f=i+e+c+a=P$。如果满足了这个条件,那么这个三角形就符合要求。
最后,我们统计符合要求的三角形的个数即可。
以下是伪代码实现:
```
count = 0
for a in range(1, 5):
for f in range(a+1, 8):
p = a + f + 1 + 9
for b in range(1, 10):
for c in range(b+1, 10):
for d in range(b+1, 10):
for e in range(c+1, 10):
for g in range(d+1, 10):
for h in range(g+1, 10):
i = p - a - f - b - d - g - h
if i != f and i != a and i != d and i != b and i != g and i != h and i != c and i != e:
continue
if b >= d or g >= h or c >= e:
continue
if a+b+d+f != i+e+c+a or f+g+h+i != i+e+c+a:
continue
count += 1
print(count)
```
阅读全文