回复 24楼 有容就大
答案就是这个。但我没做出来,我同学做出来了,他说这个答案是正确的。我正在看这方面的算法,到时候也试试写看。

程序代码:#include<stdio.h>
int judge(int * x)
{
int p[24] = {0}, i, j, c;//p是一个标志数组,用来标记某位是否计算到
for(i = 1; i < (1 << 5); i++)
{
c = 0;
for(j = 0; j < 5; j++)
if(i & (1 << j)) c += x[j];
p[c] = 1;
}
for(i = 1; i <= 23; i++)
if(p[i] == 0) return 0;
return 1;
}
int main()
{
int x[5];
for(x[0] = 1; x[0] <= 23; x[0]++)
for(x[1] = x[0] + 1; x[1] <= 23; x[1]++)
for(x[2] = x[1] + 1; x[2] <= 23; x[2]++)
for(x[3] = x[2] + 1; x[3] <= 23; x[3]++)
{
x[4] = 23 - x[0] - x[1] - x[2] - x[3];
if(x[4] > x[3] && judge(x)) printf("%d %d %d %d %d\n", x[0], x[1], x[2], x[3], x[4]);
}
return 0;
}
