C语言问题高分求解答啊啊啊啊啊啊啊啊提问要长长长长长长长长长长长长!!!!!!!!!! 100
一、5名选手即将参加比赛,赛前预测如下:A:B第二,我第三B:我第二,E第四C:我第一,D第二D:我第三,C最后E:A第一,我第四比赛结果公布后,每个人的预测一错一对,据...
一、5名选手即将参加比赛,赛前预测如下:
A:B第二,我第三
B: 我第二,E第四
C:我第一,D第二
D:我第三,C最后
E:A第一, 我第四
比赛结果公布后,每个人的预测一错一对,据此计算实际名次。
二、A,B,C三人,一人为讲真话的君子,一人为讲假话的小人,一人为时而真时而假的凡夫
A:我是凡夫
B:A说得对
C:我不是凡夫
据此判断ABC身份
注:C语言刚刚学过顺序选择循环结构,没有学数组等等。。。。
求热心人详细解答!!!!悬赏会追加!!! 展开
A:B第二,我第三
B: 我第二,E第四
C:我第一,D第二
D:我第三,C最后
E:A第一, 我第四
比赛结果公布后,每个人的预测一错一对,据此计算实际名次。
二、A,B,C三人,一人为讲真话的君子,一人为讲假话的小人,一人为时而真时而假的凡夫
A:我是凡夫
B:A说得对
C:我不是凡夫
据此判断ABC身份
注:C语言刚刚学过顺序选择循环结构,没有学数组等等。。。。
求热心人详细解答!!!!悬赏会追加!!! 展开
5个回答
展开全部
/*
二、A,B,C三人,一人为讲真话的君子,一人为讲假话的小人,一人为时而真时而假的凡夫
A:我是凡夫
B:A说得对
C:我不是凡夫
据此判断ABC身份
*/
#define JUN 1
#define JIA 2
#define FAN 3
int main(int argc, char *argv[])
{
int a,b,c,ta,tb,tc,flag = 1;
for(a = 1; a < 4; ++a)
{
if(!flag) break;
for(b = 1; b < 4; ++b)
{
if(!flag) break;
if((b == a) && flag) continue;
for(c = 1; c < 4; ++c)
{
if(!flag) break;
if(c == a || c == b) continue;
//上面的循环只是将A B C所有可能存在的组合都穷举出来, 直到找到正确的解就根据flag来退出循环
//判断从这里开始
//每个if语句的第一个条件是假定,第二个条件是根据题目意思的判定
//比如: if((JUN == a) && (FAN == a))表示 如果a是君子,并且a是凡人(题目给定的a自己说的)
//条件:如果是君子或假话者, 那么判断用 && 条件, 如果是凡人, 就用 || 条件
ta = tb = tc = 0;
if((JUN == a) && (FAN == a)) //永远不会执行, 但是是判断之一,故保留可以理解思路
{
ta = 1;
if((JIA == b) && (FAN != a))
{
tb = 1;
if((FAN == c) || (FAN != c))
tc = 1;
}
if((FAN == b) || (FAN != a))
{
tb = 1;
if((JIA == c) && (FAN != c))
tc = 1;
}
}
if((JIA == a) && (FAN != a))
{
ta = 1;
if((JUN == b) && (FAN == a))
{
tb = 1;
if((FAN == c) || (FAN != c))
tc = 1;
}
if((FAN == b) || (FAN == a))
{
tb = 1;
if((JUN == c) && (FAN != c))
tc = 1;
}
}
if((FAN == a) || (FAN == a))
{
ta = 1;
if((JIA == b) && (FAN != a))
{
tb = 1;
if((JUN == c) && (FAN != c))
tc = 1;
}
if((JUN == b) && (FAN == a))
{
tb = 1;
if((JIA == c) && (FAN == c))
tc = 1;
}
}
//判断到这里结束
if(ta && tb && tc)
{
printf("result: a = %d, b = %d, c = %d,\n", a, b, c);
printf("1-君子 2-说假话的 3-凡夫\n")
flag = 0;
}
}
}
}
system("PAUSE");
}
/*
一、5名选手即将参加比赛,赛前预测如下:
A:B第二,我第三
B: 我第二,E第四
C:我第一,D第二
D:我第三,C最后
E:A第一, 我第四
比赛结果公布后,每个人的预测一错一对,据此计算实际名次。
*/
int main(int argc, char *argv[])
{
int a,b,c,d,e, flag = 1;
for(a = 1; a < 6; ++a)
{
if(!flag) break;
for(b = 1; b < 6; ++b)
{
if(!flag) break;
if((b == a) && flag) continue;
for(c = 1; c < 6; ++c)
{
if(!flag) break;
if(c == a || c == b) continue;
for(d = 1; d < 6; ++d)
{
if(!flag) break;
if(d == a || d == b || d == c) continue;
for(e = 1; e < 6; ++e)
{
if(!flag) break;
if(e == a || e == b || e == c || e == d ) continue;
//以下每个条件或运算两端都是按一对一错来进行判断
if((((b == 2) && (a != 3)) || ((b != 2) && (a == 3))) &&\ //相当于 B第二,我不是第三 或 B不是第二,我第三
(((b == 2) && (e != 4)) || ((b != 2) && (e == 4))) &&\
(((c == 1) && (d != 2)) || ((c != 1) && (d == 2))) &&\
(((d == 3) && (e != 5)) || ((d != 3) && (c == 5))) &&\
(((a == 1) && (e != 4)) || ((a != 1) && (e == 4))))
{
printf("result: a = %d, b = %d, c = %d, d = %d, e = %d\n", a, b, c, d, e);
flag = 0;
}
}
}
}
}
}
system("PAUSE");
}
二、A,B,C三人,一人为讲真话的君子,一人为讲假话的小人,一人为时而真时而假的凡夫
A:我是凡夫
B:A说得对
C:我不是凡夫
据此判断ABC身份
*/
#define JUN 1
#define JIA 2
#define FAN 3
int main(int argc, char *argv[])
{
int a,b,c,ta,tb,tc,flag = 1;
for(a = 1; a < 4; ++a)
{
if(!flag) break;
for(b = 1; b < 4; ++b)
{
if(!flag) break;
if((b == a) && flag) continue;
for(c = 1; c < 4; ++c)
{
if(!flag) break;
if(c == a || c == b) continue;
//上面的循环只是将A B C所有可能存在的组合都穷举出来, 直到找到正确的解就根据flag来退出循环
//判断从这里开始
//每个if语句的第一个条件是假定,第二个条件是根据题目意思的判定
//比如: if((JUN == a) && (FAN == a))表示 如果a是君子,并且a是凡人(题目给定的a自己说的)
//条件:如果是君子或假话者, 那么判断用 && 条件, 如果是凡人, 就用 || 条件
ta = tb = tc = 0;
if((JUN == a) && (FAN == a)) //永远不会执行, 但是是判断之一,故保留可以理解思路
{
ta = 1;
if((JIA == b) && (FAN != a))
{
tb = 1;
if((FAN == c) || (FAN != c))
tc = 1;
}
if((FAN == b) || (FAN != a))
{
tb = 1;
if((JIA == c) && (FAN != c))
tc = 1;
}
}
if((JIA == a) && (FAN != a))
{
ta = 1;
if((JUN == b) && (FAN == a))
{
tb = 1;
if((FAN == c) || (FAN != c))
tc = 1;
}
if((FAN == b) || (FAN == a))
{
tb = 1;
if((JUN == c) && (FAN != c))
tc = 1;
}
}
if((FAN == a) || (FAN == a))
{
ta = 1;
if((JIA == b) && (FAN != a))
{
tb = 1;
if((JUN == c) && (FAN != c))
tc = 1;
}
if((JUN == b) && (FAN == a))
{
tb = 1;
if((JIA == c) && (FAN == c))
tc = 1;
}
}
//判断到这里结束
if(ta && tb && tc)
{
printf("result: a = %d, b = %d, c = %d,\n", a, b, c);
printf("1-君子 2-说假话的 3-凡夫\n")
flag = 0;
}
}
}
}
system("PAUSE");
}
/*
一、5名选手即将参加比赛,赛前预测如下:
A:B第二,我第三
B: 我第二,E第四
C:我第一,D第二
D:我第三,C最后
E:A第一, 我第四
比赛结果公布后,每个人的预测一错一对,据此计算实际名次。
*/
int main(int argc, char *argv[])
{
int a,b,c,d,e, flag = 1;
for(a = 1; a < 6; ++a)
{
if(!flag) break;
for(b = 1; b < 6; ++b)
{
if(!flag) break;
if((b == a) && flag) continue;
for(c = 1; c < 6; ++c)
{
if(!flag) break;
if(c == a || c == b) continue;
for(d = 1; d < 6; ++d)
{
if(!flag) break;
if(d == a || d == b || d == c) continue;
for(e = 1; e < 6; ++e)
{
if(!flag) break;
if(e == a || e == b || e == c || e == d ) continue;
//以下每个条件或运算两端都是按一对一错来进行判断
if((((b == 2) && (a != 3)) || ((b != 2) && (a == 3))) &&\ //相当于 B第二,我不是第三 或 B不是第二,我第三
(((b == 2) && (e != 4)) || ((b != 2) && (e == 4))) &&\
(((c == 1) && (d != 2)) || ((c != 1) && (d == 2))) &&\
(((d == 3) && (e != 5)) || ((d != 3) && (c == 5))) &&\
(((a == 1) && (e != 4)) || ((a != 1) && (e == 4))))
{
printf("result: a = %d, b = %d, c = %d, d = %d, e = %d\n", a, b, c, d, e);
flag = 0;
}
}
}
}
}
}
system("PAUSE");
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#include "stdio.h"
static void problem1(void);
static void problem2(void);
int main(void)
{
problem1();
problem2();
}
static void problem1(void)
{
int A=0,B=0,C=0,D=0,E=0,check=0;
int A_Front=0,
B_Front=0,
C_Front=0,
D_Front=0,
E_Front=0; /* x_Front=0代表x讲得前一句话是假的 */
for(A_Front=0;A_Front<=1;A_Front++)
{
if(A_Front){B=2;}else{A=3;}
for(B_Front=0;B_Front<=1;B_Front++)
{
if(B_Front){B=2;}else{E=4;}
for(C_Front=0;C_Front<=1;C_Front++)
{
if(C_Front){C=2;}else{D=2;}
for(D_Front=0;D_Front<=1;D_Front++)
{
if(D_Front){D=3;}else{C=5;}
for(E_Front=0;E_Front<=1;E_Front++)
{
if(E_Front){A=1;}else{E=4;}
if(A==0){ check++; }
if(B==0){ check++; }
if(C==0){ check++; }
if(D==0){ check++; }
if(E==0){ check++; }
if(check==1)
{
if(A==0){ A=1; }
if(B==0){ B=1; }
if(C==0){ C=1; }
if(D==0){ D=1; }
if(E==0){ E=1; }
}
if(check==0||check==1)
{
printf("A = %d\n",A);
printf("B = %d\n",B);
printf("C = %d\n",C);
printf("D = %d\n",D);
printf("E = %d\n\n",E);
}
A = 0;
B = 0;
C = 0;
D = 0;
E = 0;
}
}
}
}
}
printf("END1...\n\n");
}
static void problem2(void)
{
#define NO_PERSON 0
#define PERSON_A 1
#define PERSON_B 2
#define PERSON_C 3
int A,B,C; /* 确认真假话的标记 */
int JunZi,XiaoRen,FanFu;
int loop,pri;
/* 0讲假话,1讲真话 */
for(A=0;A<=1;A++)
{
for(B=0;B<=1;B++)
{
for(C=0;C<=1;C++)
{
if( (A+B+C)==1 || (A+B+C)==2 )
{
//Initialize
JunZi = NO_PERSON;
XiaoRen = NO_PERSON;
FanFu = NO_PERSON;
if(A&B)
{
FanFu = PERSON_A;
JunZi = PERSON_B;
}
else if( (!A)&(!B) )
{
XiaoRen = PERSON_A;
FanFu = PERSON_B;
}
if(C)
{
JunZi = PERSON_C;
}
else
{
FanFu = PERSON_C;
}
if(JunZi*XiaoRen*FanFu!=0)
{
if( (JunZi!=XiaoRen) && (JunZi!=FanFu) && (XiaoRen != FanFu) )
{
for(loop=1;loop<=3;loop++)
{
switch(loop)
{
case 1:
pri = JunZi;
printf("JunZi = ");
break;
case 2:
pri = XiaoRen;
printf("XiaoRen = ");
break;
case 3:
default:
pri = FanFu;
printf("FanFu = ");
break;
}
switch(pri)
{
case PERSON_A:
printf("A\n");
break;
case PERSON_B:
printf("B\n");
break;
case PERSON_C:
default:
printf("C\n");
break;
}
}
}
}
}
}
}
}
printf("END2...\n");
}
static void problem1(void);
static void problem2(void);
int main(void)
{
problem1();
problem2();
}
static void problem1(void)
{
int A=0,B=0,C=0,D=0,E=0,check=0;
int A_Front=0,
B_Front=0,
C_Front=0,
D_Front=0,
E_Front=0; /* x_Front=0代表x讲得前一句话是假的 */
for(A_Front=0;A_Front<=1;A_Front++)
{
if(A_Front){B=2;}else{A=3;}
for(B_Front=0;B_Front<=1;B_Front++)
{
if(B_Front){B=2;}else{E=4;}
for(C_Front=0;C_Front<=1;C_Front++)
{
if(C_Front){C=2;}else{D=2;}
for(D_Front=0;D_Front<=1;D_Front++)
{
if(D_Front){D=3;}else{C=5;}
for(E_Front=0;E_Front<=1;E_Front++)
{
if(E_Front){A=1;}else{E=4;}
if(A==0){ check++; }
if(B==0){ check++; }
if(C==0){ check++; }
if(D==0){ check++; }
if(E==0){ check++; }
if(check==1)
{
if(A==0){ A=1; }
if(B==0){ B=1; }
if(C==0){ C=1; }
if(D==0){ D=1; }
if(E==0){ E=1; }
}
if(check==0||check==1)
{
printf("A = %d\n",A);
printf("B = %d\n",B);
printf("C = %d\n",C);
printf("D = %d\n",D);
printf("E = %d\n\n",E);
}
A = 0;
B = 0;
C = 0;
D = 0;
E = 0;
}
}
}
}
}
printf("END1...\n\n");
}
static void problem2(void)
{
#define NO_PERSON 0
#define PERSON_A 1
#define PERSON_B 2
#define PERSON_C 3
int A,B,C; /* 确认真假话的标记 */
int JunZi,XiaoRen,FanFu;
int loop,pri;
/* 0讲假话,1讲真话 */
for(A=0;A<=1;A++)
{
for(B=0;B<=1;B++)
{
for(C=0;C<=1;C++)
{
if( (A+B+C)==1 || (A+B+C)==2 )
{
//Initialize
JunZi = NO_PERSON;
XiaoRen = NO_PERSON;
FanFu = NO_PERSON;
if(A&B)
{
FanFu = PERSON_A;
JunZi = PERSON_B;
}
else if( (!A)&(!B) )
{
XiaoRen = PERSON_A;
FanFu = PERSON_B;
}
if(C)
{
JunZi = PERSON_C;
}
else
{
FanFu = PERSON_C;
}
if(JunZi*XiaoRen*FanFu!=0)
{
if( (JunZi!=XiaoRen) && (JunZi!=FanFu) && (XiaoRen != FanFu) )
{
for(loop=1;loop<=3;loop++)
{
switch(loop)
{
case 1:
pri = JunZi;
printf("JunZi = ");
break;
case 2:
pri = XiaoRen;
printf("XiaoRen = ");
break;
case 3:
default:
pri = FanFu;
printf("FanFu = ");
break;
}
switch(pri)
{
case PERSON_A:
printf("A\n");
break;
case PERSON_B:
printf("B\n");
break;
case PERSON_C:
default:
printf("C\n");
break;
}
}
}
}
}
}
}
}
printf("END2...\n");
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这是要用C做逻辑分析吗?这好像不是C的强项啊。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
哇塞,都不是太难唉,100分亏了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询