解题思路:
记0为不去,1为去,6个for就是全部情况列举,2*2*2*2*2*2,
1)A和B两人中至少去一人;
2)A和D不能一起去;
3)A、E和F三人中要派两人去;
4)B和C都去或都不去;
5)C和D两人中去一个;
分别对应:
a+b>=1 && a+d!=2 && a+e+f==2 && b==c && c+d==1
6)若D不去,则E也不去===if(d==0)e=0;if(d==0)e=1;
本来应该只要if(d==0)e=0这个的,但是会发现这样,for会进入死循环,因为 for(e=0; e<=1; e++)
所以要加if(d==0)e=1,这样就能跳出循环
注意事项:
参考代码:
#include<stdio.h>
int main()
{
int a,b,c,d,e,f;
for(a=0; a<=1; a++)
for(b=0; b<=1; b++)
for(c=0; c<=1; c++)
for(d=0; d<=1; d++)
for(e=0; e<=1; e++)
for(f=0; f<=1; f++)
{
if(d==0)e=0;
if(a+b>=1 && a+d!=2 && a+e+f==2 && b==c && c+d==1)
{
if(a==1) printf("A,");
if(b==1) printf("B,");
if(c==1) printf("C,");
if(d==1) printf("D,");
if(e==1) printf("E,");
if(f==1) printf("F,");
}
if(d==0)e=1;
}
}
0.0分
18 人评分
#include<stdio.h> int main() { for(int a=0;a<=1;a++) for(int b=0;b<=1;b++) for(int c=0;c<=1;c++) for(int d=0;d<=1;d++) for(int e=0;e<=1;e++) for(int f=0;f<=1;f++) { if(e==1) //这样改是不是好懂一点 d=1; if((a+b)>=1&&(a+d)!=2&&(a+e+f)==2&&b==c&&(c+d)==1) { if(a==1) printf("A,"); if(b==1) printf("B,"); if(c==1) printf("C,"); if(d==1) printf("D,"); if(e==1) printf("E,"); if(f==1) printf("F,"); } } return 0; }
#include<stdio.h> int main() { int a,b,c,d,e,f; for(a=0;a<2;a++) for(b=0;b<2;b++) for(c=0;c<2;c++) for(d=0;d<2;d++) for(e=0;e<2;e++) for(f=0;f<2;f++) if((a+b>0) && (a+d<2) && (a+e+f==2) && (b+c==0 || b+c==2) && (c+d==1) && (d+e==0 || d==1)){ if(a) printf("A,"); if(b) printf("B,"); if(c) printf("C,"); if(d) printf("D,"); if(e) printf("E,"); if(f) printf("F,"); break; } return 0; } 我感觉这样看起来整齐很多呀~~当然这是我自己写的哈,跟你的很像耶,嘿嘿
司机是个大坏蛋 2017-08-18 22:25:32 |
你的更简洁啊,厉害了
Langzihao. 2017-08-19 09:18:07 |
嘿嘿,跟你差不多,不厉害不厉害,就是整齐而已。强迫症0.0
Christ 2018-08-21 08:39:00 |
建议不要这样写,要是代码再长一些,这样的写法无法直接表达语句逻辑关系,会给维护带来很多不必要的麻烦
南初 2022-05-06 21:04:28 |
循环嵌套容易出事