栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C语言进阶学习—疑难杂题

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C语言进阶学习—疑难杂题

如题

5位运动员参加了10米台跳水比赛,有人让他们预测比赛结果:

A选手说:B第二,我第三;

B选手说:我第二,E第四;

C选手说:我第一,D第二;

D选手说:C最后,我第三;

E选手说:我第四,A第一;

比赛结束后,每位选手都说对了一半,请编程确定比赛的名次。

一开始想岔了写了一堆IF循环,最后还试了试多重函数嵌套,如图

但这种写法,导致一个问题,就是,原题所给的条件中并没有说明所有人的名次,只是说每个人有一半对

最后,解题思路如下

1,生成所有可能的排列组合

2,用每个排列组合和每个人说的话一一对应

最后,代码如下

以下提供复制

int chong_fu(int arr[])//判断是否有重复
{
    for (int i = 0; i < 5; i++)
    {
        for (int j = 0; j < 5;j++)
        {
            if (arr[i] == arr[j] && i != j)
            {
                return 0;
            }
        }
    }
    return 1;
}
int end(int* a, int* b, int* c, int* d, int* e)//判断条件
{
    //A选手说:B第二,我第三;
    if (*b == 2 || *a == 3)
    {
        //B选手说:我第二,E第四;
        if (*b == 2 || *e == 4)
        {
            //C选手说:我第一,D第二;
            if (*c == 1 || *d == 2)
            {
                //D选手说:C最后,我第三;
                if (*c == 5 || *d == 3)
                {
                    //E选手说:我第四,A第一;
                    if (*e == 4 || *a == 1)
                    {
                        return 1;
                    }
                }
            }
        }
    }
    return 0;
}
int jie(int* a, int* b, int* c, int* d, int* e)
{
    for (*a = 1; *a <= 5; (*a)++)//产生所有可能的数字
    {
        for (*b = 1; *b <= 5; (*b)++)
        {
            for (*c = 1; *c <= 5; (*c)++)
            {
                for (*d = 1; *d <= 5; (*d)++)
                {
                    for (*e = 1; *e <= 5; (*e)++)
                    {
                        int arr[5] = { *a,*b,*c,*d,*e };
                        if (chong_fu(arr) == 1)//判断是否有重复
                        {
                            if (end(a,b,c,d,e) == 1)
                            {
                                return 1;
                            }
                        }
                    }
                }
            }
        }
    }
    return 0;
}
int main()
{
    int a = 0, b = 0, c = 0, d = 0, e = 0;
    jie(&a, &b, &c, &d, &e);
    printf(" A:%d  B:%d  C:%d  D:%d  E:%d  ", a, b, c, d, e);
    return 0;
} 

输出结果

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/950422.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号