C语言 编程题 求大神解答?

如题所述

#include<stdio.h>

int main()

{ int a,b,c,d;

  for(a=0; a<2; a++)

    for(b=0; b<2; b++)

      for(c=0; c<2; c++)

        for(d=0; d<2; d++)

          if((a==0)+(c==1)+(d==1)+(d==0)==3&&(a+b+c+d==1))

          { if(a)printf("A\n");

            if(b)printf("B\n");

            if(c)printf("C\n");

            if(d)printf("D\n");

          }

  return 0;

}

追问

为什么你的这个代码 我编译的时候显示没错误 组建的时候就有错误了 我找不到哪有错误阿 难道是我这软件有问题吗

没错 查过了 就是我软件问题 😊可以和我说一下你的这个编程的思路吗

追答

for(a=0; a<2; a++)
for(b=0; b<2; b++)
for(c=0; c<2; c++)
for(d=0; d<2; d++) 四个人,每人都有“是”或“不是”的可能
(a==0)+(c==1)+(d==1)+(d==0)==3 说对话的人有3个
(a+b+c+d==1) 只有一个是嫌疑人

追问

我是c语言初学者 看不懂你的中间的那段if语句 可以解释一下你的思路吗

追答

那个if 语句,就是说,说真话的人有3个,而且嫌疑人只有1个啊

追问

懂了 谢谢你

温馨提示:内容为网友见解,仅供参考
第1个回答  2019-11-26
#include <stdio.h>
int main()

{
const char* c[4] = {"A", "B", "C", "D"};
int a[4] = {0}; // a0, a1, a2, a3

int b[4], res = -1;

for (int i = 0; i < 4; i++)
{
a[i] = 1; // 有1人嫌疑,不妨设是i(i取0,1,2,3分别对应A,B,C,D)

b[0] = (a[0] == 0); // A所说(A:不是我)
b[1] = (a[2] == 1); // B所说(B:是C)
b[2] = (a[3] == 1); // C所说(C:是D)
b[3] = (a[3] == 0); // D所说(D:C在胡说)

for (int j = 0; j < 4; j++)
{
// 已知:3个说的是真话,1个是假话
// 不妨设j说谎
b[j] = !b[j];

// 检查是否满足:3个说的是真话,1个是假话
if (b[0] && b[1] && b[2] && b[3])
{
res = i;
break;
}

// j没说谎,复位
b[j] = !b[j];
}

if (res >= 0)
{
printf("推断出是:%s\n", c[res]);
break;
}

a[i] = 0; // 不是i,复位
}
}追问

哇 厉害 不过visual c++编译不出来 显示有一个错误 我找不到哪里有错误

第2个回答  2019-11-26
...........这个就需要你把选项逐个套进入题目中看看是否满足要求啦......本回答被网友采纳

求c语言大神给解!!⊙▽⊙
\\\\, -- 就是 \\ 号 所以答案是12 选D

C语言的题哪位大神帮帮我?
&n); int numbers[n]; int sum = 0; for (int i = 0; i < n; i++) { printf("请输入第%d个数字:", i + 1); scanf("%d", &numbers[i]);sum += numbers[i];

C语言 计算机题 求大神解答~
1、能正确表示逻辑关系:“a≥10或a≤0”的C语言表达式是“a>=10||a<=0”。(D选项)解析:“≥”用“>=”表示,“或”用“||”表示。2、判断char型变量c是否为大写字母的表达式是“(c>='A')&&(c<='Z')”。(C选项)解析:大写字母是A~Z,加上单引号,可以直接用来判断是否符合要求...

c语言的题,求大神解答
题1:i++先进行表达式运算,最后再自增;++i先自增,再进行表达式运算,从结果上看最终都会导致i+1,所以结束后i,j,k都分别加1了。题2:C的写法就是强制类型转换,a1+a2的结果本来还是int,但是被强制转换成了char。A、B是普通的加法运算,D是可以说是赋值运算 ...

求c语言大神帮忙
2、选D,二义性,说的是,在使用(调用)这个定义时,不会产生与宏定义本意不同的编程结果。正确的做法是D,它使用最高优先级符号(括号),将变量进行独立分割,再使用最高优先级符号(还是括号),对宏定义结果进行保护。二义例:A:当 x 传递的是 a+b 变量时,理想应该是(a+b)*(a+b)...

c语言求大神
做编程的题目,如果条件允许的话,给你的建议就是直接在编译器编译一下,看看输出的结果,然后利用单步调试,一步步的看下变量中的值得变化。下图是我运行你代码的结果(答案:B):题目解析如下:1、x[3][2] = {0}指的是定义一个 3x2 数组,并将数组的所有值初始化为 0。2、输入2 4 6之后...

c语言菜鸟求帮忙,跪求跪求,54和55两道题求大神解答 要解释 谢谢_百度...
54. 选D。55. 题目有错:应该是“并有以下输入数据”而不是“并有以下输出数据”。除此之外D正确。具体是这样的:第1个&s1接收了2后面的回车,第2个&s1接收了字符U;第1个&s2接收了U后面的空格,第2个&s2接收了字符V;第1个&s3接收了V后面的空格,第2个&s3接收了字符W。

C语言问题,求大神解决,谢谢啦,我是小白,最好能够解释下原因..
则表示指向a[2][1]的指针,所以*(*(a+2)+1)就是a[2][1]。再来看D选项,a[2]是指向a[2][0]的指针,a[2]+1就是指向a[2][1]的指针。所以*(a[2]+1)就是a[2][1]。第三项结果是一个指针,也就是一个地址。它就是a[2][1]的地址,由于scanf要求是地址,所以它是正确的。

c语言编程题求快速解答!!
,解得:m=1 n=1 ,故A20α=620 α1 +120 α2 = 620+3 620-2 .要使AB=0,则B的列向量必为Ax=0的解,将A进行初等变化为{1 -2 3;-0 0 0 ;0 0 0},可得基础解系(2 1 0)T,(-3 0 1)T,所以B={2 -3 0;1 0 0 ;0 1 0}满足条件 用冒泡法求,就可以了 ...

c语言题,求大神解答一下我做的对不对,急急急!
却赋值字符数组的方式去赋值。D中给int类型的数组赋值了字符串,不正确。例五正解为C,数组a中存入了字符串,a[0] = 'x',以此类推,但是字符串初始化时,会在数组最后再存入一个'\\0'休止符作为结束。所以sizeof(a)的值为4;数组b的长度如题可知为3。所以数组a的长度大于b的数组长度 ...

相似回答