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语言刚刚学过顺序选择循环结构,没有学数组等等。。。。

求热心人详细解答!!!!悬赏会追加!!!
展开
 我来答
尺丶八
2012-01-20 · 超过43用户采纳过TA的回答
知道答主
回答量:264
采纳率:0%
帮助的人:123万
展开全部
跟你直接说答案也不锻炼你的C语言能力 干脆给你提个思路吧
第一题 用if-else嵌套语句
第二题好像也是这样
zero_fn
2012-01-20 · TA获得超过2258个赞
知道小有建树答主
回答量:1173
采纳率:80%
帮助的人:450万
展开全部
/*
二、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");
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
淡淡地调情
2012-01-20 · 超过12用户采纳过TA的回答
知道答主
回答量:42
采纳率:0%
帮助的人:38.4万
展开全部
#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");
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ianynchen
2012-01-20 · TA获得超过117个赞
知道小有建树答主
回答量:161
采纳率:0%
帮助的人:112万
展开全部
这是要用C做逻辑分析吗?这好像不是C的强项啊。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
三石反三俗
2012-01-20 · 超过14用户采纳过TA的回答
知道答主
回答量:36
采纳率:0%
帮助的人:30.1万
展开全部
哇塞,都不是太难唉,100分亏了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式