用c语言算一个简单的循环判断,或者递归

老铁帮我加一段代码。谢谢。

#include "stdafx.h"
#include
int main()
{
int a, b, c, d, e, i = 0;
int b_a, c_b, d_c, e_d=0;
for (a = 1; a <= 15; a++)
for (b = 1; b <= 15; b++)
for (c = 1; c <= 15; c++)
for (d = 1; d <= 15; d++)
for (e = 1; e <= 15; e++)
if (b - a > 0 && c - b > 0 && d - c > 0 && e - d > 0)
{
b_a=b-a;
c_b=c-a;
d_c=d-c;
e_d=e-d;
/*在这里帮我加上一段逻辑控制,用递归算一算下面的6种关系,把6种情况里面的符合条件 的 a,b,c ,d,e的值全部打印出来。比如:b-a=c-b,等等*/

printf("A:%2d B:%2d C:%2d D:%2d E:%2d ", a, b, c, d, e);
i++;
if (i % 1 == 0)
printf("\n");
}
}
}
}
printf("一共%d种\n", i);
return 0;
}
需要循环控制的6种小逻辑。
1 。b-a=c-b并且d-c≠e-d并且b-a≠d-c并且b-a≠e-d
2。 b-a=e-d并且c-b≠d-c并且b-a≠c-b并且b-a≠d-c
3。 b-a=d-c并且c-b≠e-d并且b-a≠c-b并且b-a≠e-d
4。 c-b=d-c并且b-a≠e-d并且c-b≠b-a并且c-b≠e-d
5。 d-c=e-d并且b-a≠c-b并且d-c≠b-a并且d-c≠c-b
6。 c-b=e-d并且b-a≠d-c并且c-b≠b-a并且c-b≠d-c

打个比方,有4个球A,B,C,D。从这4个球里面选择2个球,其中A等于B的时候,其他的球B不等于C,B不等于D,C不等于D.

希望懂的老铁能帮我加一段逻辑控制。把代码添加到这里。

/*在这里帮我加上一段逻辑控制,用递归算一算下面的6种关系,把6种情况里面的符合条件 的 a,b,c ,d,e的值全部打印出来。比如:b-a=c-b,等等*/

6个回答

整理下你的意思:五个整型数值(1-15),后边的数值依次比前面的大,存在并且只有一组相邻的数值差相等;
简化修正你的代码(for循环,减去不必要的循环;c_b=c-b,你写成了c-a;
因为四个数值差你都定义了变量,的确不符合使用循环,使用循环的话可以定义成数组;这里用相等的个数==1进行判断)
int main()
{
int a, b, c, d, e, i = 0;
int b_a, c_b, d_c, e_d=0;
int equalNum=0;
for (a = 1; a <= 11; a++)
for (b = a+1; b <= 12; b++)
for (c = b+1; c <= 13; c++)
for (d = c+1; d <= 14; d++)
for (e = d+1; e <= 15; e++)
{
b_a=b-a;
c_b=c-b;
d_c=d-c;
e_d=e-d;
/*在这里帮我加上一段逻辑控制,用递归算一算下面的6种关系,把6种情况里面的符合条件 的 a,b,c ,d,e的值全部打印出来。比如:b-a=c-b,等等*/
equalNum=0;
if(b_a==c_b) equalNum++;
if(b_a==d_c) equalNum++;
if(b_a==e_d) equalNum++;
if(c_b==d_c) equalNum++;
if(d_c==e_d) equalNum++;
if(equalNum==1){
printf("A:%2d B:%2d C:%2d D:%2d E:%2d ", a, b, c, d, e);
printf("\n");
i++;
}
}
printf("一共%d种\n", i);
}
运行结果如下:
图片说明

Longtheworld
水里的魚儿 哦,落了一个if,该一共1752种 if(c_b==e_d) equalNum++;
大约 2 年之前 回复

不需要递归,用多条件判断语句就行了。
int main()
{
int a, b, c, d, e, i = 0;
int b_a, c_b, d_c, e_d=0;
for (a = 1; a <= 15; a++)
for (b = 1; b <= 15; b++)
for (c = 1; c <= 15; c++)
for (d = 1; d <= 15; d++)
for (e = 1; e <= 15; e++)

b_a=b-a;
c_b=c-a;
d_c=d-c;
e_d=e-d; #先在for后面把要判断的4种表达式给算出来,用变量形式存储

if (b_a > 0 && c_b > 0 && d_c > 0 && e _d > 0) #然后进行条件判断
{
if(b_a=c_b并且d_c!=e_d并且b_a!=d_c并且b_a!=e_d) #这里进行第二层判断,就是你所说的6中小逻辑,所以这里的内条件嵌套一共有6个
{
printf("A:%2d B:%2d C:%2d D:%2d E:%2d ", a, b, c, d, e); #语句块里把符合条件的a,b,c,d,e打印出来或者存储
}
else if (b-a=e-d并且c-b≠d-c并且b-a≠c-b并且b-a≠d-c)
{
printf("A:%2d B:%2d C:%2d D:%2d E:%2d ", a, b, c, d, e);

}
else if ....
}
i++; i要放在最后一个for语句中
if (i % 1 == 0)
printf("\n");

因为你上面5个for已经遍历a,b,c,d,e的所有范围了,所以不需要递归
用for + if + if就可以遍历所有范围就可以把满足条件的数值提取出来了

我是学python的,不过思路是一样的。之前有学C,不得不说,C的中括号好麻烦,哈哈

之前给你写的程序上哪里去了,怎么又变成你之前的程序了。
把我之前给你的程序贴出来,我来帮你写。

caozhy
贵阳老马马善福专业维修游泳池堵漏防水工程 回复qijixingzhe: 我觉得很无辜,我的程序难道就不能适应各种需求了么?你就对我那么没有信心么?哈哈
大约 2 年之前 回复
qijixingzhe
qijixingzhe 老铁,我有各种各样的需求,不一样的
大约 2 年之前 回复
 for (a = 1; a <= 15; a++)
for (b = 1; b <= 15; b++)
for (c = 1; c <= 15; c++)
for (d = 1; d <= 15; d++)
for (e = 1; e <= 15; e++)

都循环遍历了 ,何来递归 ,直接if判断不就得了

#include
int main()
{
int i,sum;
sum=0;
for(i=1;i<=100;i++)
sum+=i;
printf("sum=%d\n",sum);
return 0;
}

#include
int main()
{
int i,sum;
sum=0;
for(i=1;i<=100;i++)
sum+=i;
printf("sum=%d\n",sum);
return 0;
}
使用for循环语句实现从1加到100的最简单循环,看看是否对你有启发
上一条没填完

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐