鱼C论坛

 找回密码
 立即注册
查看: 2197|回复: 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
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-5-8 19:46:44 | 显示全部楼层
???
(c==1)&&!(a==3) ||  !(c==1)&&(a==3)
!表示“反转”,也就是真变假,假变真
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

int main()
{
    int a, b, c, d;

    for (a = 1; a <= 4; a++)
        for (b = 1; b <= 4; b++)
            for (c = 1; c <= 4; c++)
                for (d = 1; d <= 4; d++)
                {
                    if (((c == 1) && !(a == 3) || !(c == 1) && (a == 3)) &&
                        ((b == 1) && !(d == 4) || !(b == 1) && (d == 4)) &&
                        ((d == 2) && !(c == 3) || !(d == 2) && (c == 3)) &&
                        (a != b && a != c && a != d && b != c && b != d && c != d))
                        printf("甲%d, 乙%d, 丙%d, 丁%d\n", a, b, c, d);
                }

    return 0;

运行结果是:
甲3, 乙1, 丙4, 丁2
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-14 02:23

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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