#include "stdafx.h"
#include
#include
int main()
{
int a, b, c, d, e, i = 0;
int sum = 0;
int b1[31] = { 1,4,3,4,5,6,7,0 };
int b2[31] = { 1,1,3,4,5,3,7,0 };
int b3[31] = { 1,7,3,4,5,6,7,0 };
int b4[31] = { 1,1,3,4,5,4,7,0 };
int b5[31] = { 1,1,3,4,5,6,7,0 };
for (a = 1; a <= 8; a++)
{
b1[a] = 1;
b1[a] = 4;
b1[a] = 3;
b1[a] = 4;
b1[a] = 5;
b1[a] = 6;
b1[a] = 7;
b1[a] = 0;
}
for (b = 1; b <= 8; b++)
{
b2[b] = 1;
b2[b] = 1;
b2[b] = 3;
b2[b] = 4;
b2[b] = 5;
b2[b] = 3;
b2[b] = 7;
b2[b] = 0;
}
for (c = 1; c <= 8; c++)
{
b3[c] = 1;
b3[c] = 7;
b3[c] = 3;
b3[c] = 4;
b3[c] = 5;
b3[c] = 6;
b3[c] = 7;
b3[c] = 0;
}
for (d = 1; d <= 8; d++)
{
b4[d] = 1;
b4[d] = 1;
b4[d] = 3;
b4[d] = 4;
b4[d] = 5;
b4[d] = 4;
b4[d] = 7;
b4[d] = 0;
}
for (e = 1; e <= 8; e++)
{
b5[e] = 1;
b5[e] = 1;
b5[e] = 3;
b5[e] = 4;
b5[e] = 5;
b5[e] = 6;
b5[e] = 7;
b5[e] = 0;
}
sum = b1[a] + b2[b] + b3[c] + b4[d] + b5[e];
if (sum ==5)
{
printf("A:%2d B:%2d C:%2d D:%2d E:%2d ", b1[a], b2[b], b3[c], b4[d], b5[e]);
i++;
if (i % 1 == 0)
printf("\n");
}
printf("共有%d种办法\n", i);
return 0;
}
我想当a=1的时候b1【1】=1,依次类推,最后判定sum==5把它们分别打印出来,但是运行结果却现实共有0种办法,应该最少有一种组合的呀。问题出在哪里啦?5重for循环,如何用数组给它分别循环赋值呢?请教
程序是顺序执行的,到计算sum那句时候所有的for循环都执行结束了, a, b, c, d, e都等于8,b1[8]到b5[8]都赋值为0了。所以你的得到0种组合。
不知道你这是要干什么。可以把你要的效果说下,帮你分析。
我看到了你的赋值循环,没看到计算sum时的循环,不知道这个代码贴的是不是有问题,下次提问可以的话请把代码放到代码块中。
如果代码像我看到的这句
sum = b1[a] + b2[b] + b3[c] + b4[d] + b5[e];
执行的是sum = b1[8] + b2[8] + b3[8] + b4[8] + b5[8];
只执行了这一次。这个就是问题症结。改的话这样:
for (a = 1; a <= 8; a++)
for (b = 1; b <= 8; b++)
for (c = 1; c <= 8; c++)
for (d = 1; d <= 8; d++)
for (e = 1; e <= 8; e++)
{
sum = b1[a] + b2[b] + b3[c] + b4[d] + b5[e];
if(sum%5==0)
{
printf("A:%2d B:%2d C:%2d D:%2d E:%2d ", b1[a], b2[b], b3[c], b4[d], b5[e]);
}
}
没有测试,大概就是这样。
你的是5个单个循环呀,从上到下执行,每个运行都跑完后再执行 sum = b1[a] + b2[b] + b3[c] + b4[d] + b5[e]; 他都循环的输出了是0
int a, b, c, d, e, i = 0; 定义的默认都是0
for (a = 1; a <= 8; a++)
{
b1[a] = 1;
b1[a] = 4;
b1[a] = 3;
b1[a] = 4;
b1[a] = 5;
b1[a] = 6;
b1[a] = 7;
b1[a] = 0;
}
这个循环就有问题,每次a值对应的b1都会被最后一次赋值覆盖。
可以这样(示例):
c[]={1,2,3,4,5,6}
for(int i=0;i<6;i++)
{
b1[i]=c[i];
}
for (a = 1; a <= 8; a++)
{
b1[a] = 1;
b1[a] = 4;
b1[a] = 3;
b1[a] = 4;
b1[a] = 5;
b1[a] = 6;
b1[a] = 7;
b1[a] = 0;
}
这个循环就有问题,每次a值对应的b1都会被最后一次赋值覆盖。
可以这样(示例):
c[]={1,2,3,4,5,6}
for(int i=0;i<6;i++)
{
b1[i]=c[i];
}