| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1137 人关注过本帖, 2 人收藏
标题:确定比赛的名次
只看楼主 加入收藏
剑八
Rank: 1
等 级:新手上路
帖 子:36
专家分:0
注 册:2008-11-9
结帖率:100%
收藏(2)
 问题点数:0 回复次数:9 
确定比赛的名次
A说:B第一,我第三
   B说:我第二 E第四
   C说:我第一 D第二
   D说:C最后 我第三
   E说:我第四 A第一
  每位选手都说对了一半,请编程确定比赛的名次
搜索更多相关主题的帖子: 名次 
2008-12-07 20:57
neverTheSame
Rank: 3Rank: 3
来 自:江西农业大学
等 级:新手上路
威 望:9
帖 子:1511
专家分:0
注 册:2006-11-24
收藏
得分:0 
以上是顺序得不到结果,是错误的.
以下是我的程序.
#include<stdio.h>
int main()
{
    char *array[5][2] = {
    {"B1","A3"},
    {"B2","E4"},
    {"C1","D2"},
    {"D5","D3"}, /*修改一下,就能得出正确排名*/
    {"E4","A1"}};
    int A,B,C,D,E;
    char person[5] = {0};
    char order[5] = {0};
    int i;

    for(A = 0; A < 2; A++)
    {
        for(B = 0; B < 2; B++)
        {
            for(C = 0; C < 2; C++)
            {
                for(D = 0; D < 2; D++)
                {        
                    for(E = 0; E < 2; E++)
                    {
                        for(i = 0; i < 5; i++)
                        {
                            person[i] = 0;
            order[i] = 0;
                        }
                        
                        person[array[0][A][0] - 'A'] += 1;
                        order[ array[0][A][1] - '1'] += 1;

                        person[array[1][B][0] - 'A'] += 1;
                        order[ array[1][B][1] - '1'] += 1;

                        person[array[2][C][0] - 'A'] += 1;
                        order[ array[2][C][1] - '1'] += 1;

                        person[array[3][D][0] - 'A'] += 1;
                        order[ array[3][D][1] - '1'] += 1;

                        person[array[4][E][0] - 'A'] += 1;
                        order[ array[4][E][1] - '1'] += 1;

                        for(i = 0; i < 5; i++)
             {
            if(person[i] != 1)
                                break;
            if(order[i] != 1)
                break;
            }

            if(i >= 5)
            {
                    printf("%s %s %s %s %s\n",
            array[0][A],
            array[1][B],
            array[2][C],
            array[3][D],
            array[4][E]);
            }
                    }
                }
            }
        }
    }
    return 0;
}

主要思想:
当排名成功时,person和order数组只且只会被加一次.即结果为1.

wap酷禾网(http://wap.),提供免费的、优质的、快捷的wap资源下载服务。
2008-12-07 22:00
neverTheSame
Rank: 3Rank: 3
来 自:江西农业大学
等 级:新手上路
威 望:9
帖 子:1511
专家分:0
注 册:2006-11-24
收藏
得分:0 
这时的结果为:
A3 B2 C1 D5 E4

wap酷禾网(http://wap.),提供免费的、优质的、快捷的wap资源下载服务。
2008-12-07 22:02
广陵绝唱
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:29
帖 子:3607
专家分:1709
注 册:2008-2-15
收藏
得分:0 
你确定你的条件给出的是正确的?我怎么得不出结果?


PS:  当我正编程序时,楼上把代码已经贴出来了。晕~

[[it] 本帖最后由 广陵绝唱 于 2008-12-7 22:11 编辑 [/it]]
2008-12-07 22:08
剑八
Rank: 1
等 级:新手上路
帖 子:36
专家分:0
注 册:2008-11-9
收藏
得分:0 
谢谢  题目没错
2008-12-08 13:13
广陵绝唱
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:29
帖 子:3607
专家分:1709
注 册:2008-2-15
收藏
得分:0 
回复 第5楼 剑八 的帖子
能不能公布一下最终的答案?我们好参照一下。
2008-12-08 19:09
ying8501
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:6
帖 子:1092
专家分:1446
注 册:2008-11-24
收藏
得分:0 
此题条件不对。是无解的。
#include <stdio.h>
void main()
{
    int a,b,c,d,e,flag;
    for(a=1;a<=5;a++)
        for(b=1;b<=5;b++)
            if(a!=b)
                for(c=1;c<=5;c++)
                    if(a!=c&&b!=c)
                        for(d=1;d<=5;d++)
                            if(a!=d&&b!=d&&c!=d)
                            {
                                e=15-a-b-c-d;
                                flag=e>=1&&e<=5&&((b==1)+(a==3)==1);
                                flag=flag&&((b==2)+(e==4)==1);
                                flag=flag&&((c==1)+(d==2)==1);
                                flag=flag&&((c==5)+(d==3)==1);
                                flag=flag&&((e==4)+(a==1)==1);
                                if(flag)
                                    printf("\t比赛的名次为: A%d B%d C%d D%d E%d\n\n\t",a,b,c,d,e);
                            }
}

[[it] 本帖最后由 ying8501 于 2008-12-8 23:27 编辑 [/it]]
2008-12-08 20:53
ying8501
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:6
帖 子:1092
专家分:1446
注 册:2008-11-24
收藏
得分:0 
回复 第3楼 neverTheSame 的帖子
A说:B第一,我第三
   B说:我第二 E第四
   C说:我第一 D第二
   D说:C最后 我第三
   E说:我第四 A第一
  每位选手都说对了一半,请编程确定比赛的名次
这时的结果为:
A3 B2 C1 D5 E4 与  B说:我第二 E第四矛盾。
2008-12-08 20:59
ying8501
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:6
帖 子:1092
专家分:1446
注 册:2008-11-24
收藏
得分:0 
回复 楼主 剑八 的帖子
呵呵,能否给出结果。题目条件应该是有问题的。
2008-12-08 21:13
ying8501
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:6
帖 子:1092
专家分:1446
注 册:2008-11-24
收藏
得分:0 
呵呵,如果有并列的就可以了。而且是多解的。
2008-12-08 23:22
快速回复:确定比赛的名次
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018432 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved