鱼C论坛

 找回密码
 立即注册
查看: 2574|回复: 2

求大神指点

[复制链接]
发表于 2020-5-8 19:41:16 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
甲、乙、丙、丁四人参加一次数学竞赛。赛后,他们四人预测名次的谈话如下:
甲说:“丙得第一,我第三名”;
乙说:“我第一名,丁第四名”
丙说:“丁第二名,我第三名”
丁没说话。
当最后结果公布时,甲乙丙都只说对了一半,请给出正确的4人名次(没有并列名次)。
解题思路:
甲的名次是1,2,3,4中的一种,同理,乙,丙,丁也是如此。这样,可以用一个4重循环,把甲乙丙丁四人的名次做枚举。
不妨设甲乙丙丁的名次分别为a,b,c,d
“丙得第一,我第三名”;c==1 && a==3
都只说对了一半,则可表述为:(c==1)&&!(a==3) ||  !(c==1)&&(a==3)
名次互不相同,a!=b && a!=c && a!=d && b!=c && b!=d && c!=d
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-5-8 19:46:44 | 显示全部楼层
???
  1. (c==1)&&!(a==3) ||  !(c==1)&&(a==3)
复制代码

!表示“反转”,也就是真变假,假变真
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-8 22:11:17 | 显示全部楼层
  1. #include <stdio.h>

  2. int main()
  3. {
  4.     int a, b, c, d;

  5.     for (a = 1; a <= 4; a++)
  6.         for (b = 1; b <= 4; b++)
  7.             for (c = 1; c <= 4; c++)
  8.                 for (d = 1; d <= 4; d++)
  9.                 {
  10.                     if (((c == 1) && !(a == 3) || !(c == 1) && (a == 3)) &&
  11.                         ((b == 1) && !(d == 4) || !(b == 1) && (d == 4)) &&
  12.                         ((d == 2) && !(c == 3) || !(d == 2) && (c == 3)) &&
  13.                         (a != b && a != c && a != d && b != c && b != d && c != d))
  14.                         printf("甲%d, 乙%d, 丙%d, 丁%d\n", a, b, c, d);
  15.                 }

  16.     return 0;
复制代码


运行结果是:
甲3, 乙1, 丙4, 丁2
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-12 19:01

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表