5重循环如何赋值?拿50分谢谢啦

qijixingzhe 2018-03-06 06:28:58
#include "stdafx.h"
#include<stdio.h>
#include<math.h>
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循环,如何用数组给它分别循环赋值呢?请教
...全文
310 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
@风轻云淡_ 2018-03-07
  • 打赏
  • 举报
回复
你定义数组的时候就初始化了,假设后面的所谓的循环正确的话 他所做的也就是你已经做过的初始化工作,反而现在你的循环将所有元素都变为了0 你后面又判断他们等不等于5,全是0 ,哪来的5,好好理顺一下逻辑吧。
自信男孩 2018-03-07
  • 打赏
  • 举报
回复
sum = b1[a] + b2[b] + b3[c] + b4[d] + b5[e];
这儿的sum的值是0,因为b1[a]。。。b5[e]都是0。因为下标是从0开始,而不是1开始。 所以上面的sum = b1[a] + b2[b] + b3[c] + b4[d] + b5[e];等价sum = b1[9] + b2[9] + ... + b5[9]; b1[9] ... b5[9]都是0。
自信男孩 2018-03-07
  • 打赏
  • 举报
回复
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 (a = 1; a <= 8; a++)
{
b1[a] = 0;
}
所以要么你的循环写的有问题,要么就是逻辑考虑的有问题 下面的几个循环都是这样的问题
L-talent 2018-03-07
  • 打赏
  • 举报
回复
比如int b1[9]; int a[9]={1,3,5,7,9,0,2,4,6}; for(int i=0;i<9;i++) { b1[i]=a[i]; } 不过一般a[9]是其他表达式或函数获得
LubinLew 2018-03-07
  • 打赏
  • 举报
回复

#include "stdafx.h"
#include<stdio.h>

#define MAX 8

int main(void)
{
	int a, b, c, d, e, i = 0;
	int sum = 0;
	int b1[MAX] = { 1,4,3,4,5,6,7,0 };
	int b2[MAX] = { 1,1,3,4,5,3,7,0 };
	int b3[MAX] = { 1,7,3,4,5,6,7,0 };
	int b4[MAX] = { 1,1,3,4,5,4,7,0 };
	int b5[MAX] = { 1,1,3,4,5,6,7,0 };

	for (a = 0; a < MAX; a++) {
		for (b = 0; b < MAX; b++) {
			for (c = 0; c < MAX; c++) {
				for (d = 0; d < MAX; d++) {
					for (e = 0; e < MAX; e++) {
						sum = b1[a] + b2[b] + b3[c] + b4[d] + b5[e];
						if (5 == sum) {
							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;
}
@风轻云淡_ 2018-03-07
  • 打赏
  • 举报
回复
引用 5 楼 qq_35876885 的回复:
数组赋值:如果是常量的话直接赋值就好了,而且你已经赋过了。非要用循环的话,要是变量。比如 for(int i=0;i<8;i++) { b1[i]=变量; }
很明显,他要得是每个数组元素里面有不同的值,怎么用循环赋值?
L-talent 2018-03-07
  • 打赏
  • 举报
回复
数组赋值:如果是常量的话直接赋值就好了,而且你已经赋过了。非要用循环的话,要是变量。比如 for(int i=0;i<8;i++) { b1[i]=变量; }
考拉一枚 2018-03-06
  • 打赏
  • 举报
回复
你知道你这里计算的是什么 sum = b1[a] + b2[b] + b3[c] + b4[d] + b5[e]; 在你的代码里这里算的是 sum = b1[9] + b2[9] + b3[9] + b4[9] + b5[9]=0,接着if循环判断为假,继续执行printf("共有%d种办法\n", i); 这里的i值为0.。。。。

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧