| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 950 人关注过本帖
标题:两个队伍比赛乒乓球的问题。
只看楼主 加入收藏
yibanguaiqi
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2014-10-20
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:6 
两个队伍比赛乒乓球的问题。
两个乒乓球队进行比赛,各对出3人,每人与对方队的一人进行一场比赛,甲队出A B C三人,乙队出 X Y Z三人。请编程找出所有可能的对阵情况。抽签后,有人向队长打听对阵情况,A说他不和X比,C说他不和X、Z比,编程找出三个对手名单。
#include <stdio.h>

int main() {
    char a, b, c;//分别为A,B,C的对手(A不与X,C不与X,Z)
    for(a ='X',b ='X',c ='X'; a <='Z'; a++) {
        if(a!=b && a!=c && b!=c && a!='X' && c!='X' && c!='Z') break;
        for( b ='X'; b <='Z'; b++) {
            if(a!=b && a!=c && b!=c && a!='X' && c!='X' && c!='Z') break;
            for( c = 'X'; c <='Z'; c++) {
                if(a!=b && a!=c && b!=c && a!='X' && c!='X' && c!='Z') break;
            }
        }
    }
    printf("A对手%c\nB对手%c\nC对手%c\n",a,b,c);
    return 0;
}   
跑出来一直不对,小弟愚笨,实在不知道哪儿错了~   不要网上赋值的答案过来,希望大家帮我看看哪儿有问题。
搜索更多相关主题的帖子: include 乒乓球 
2014-10-26 01:24
yibanguaiqi
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2014-10-20
收藏
得分:0 
回复 楼主 yibanguaiqi
有人么?
2014-10-27 00:11
fan200953
Rank: 2
等 级:论坛游民
帖 子:18
专家分:30
注 册:2012-9-1
收藏
得分:20 
for( c = 'X'; c <='Z'; c++) {
                if(a!=b && a!=c && b!=c && a!='X' && c!='X' && c!='Z') break;
            }
        }
    }
    printf("A对手%c\nB对手%c\nC对手%c\n",a,b,c);
    return 0;
}   

你最后这个for 循环,如果没执行break; C='Z'+1;  所以运行出来应该是‘[’这个符号吧。
printf("A对手%c\nB对手%c\nC对手%c\n",a,b,c-1  ) 就行。  


以下是我写的,同样是新手,大家多交流 嘻嘻。
#include<stdio.h>
void main()
{

    char  a,b,c;
    for(b='X';b<='Z';b++) // b不受限制,
    {    for(a='X';a<='Z';a++)
        { if (a=='X')   
           continue;    //a==X时候跳出本循环,令a=Y
         else
             for(c='X';c<='Z';c++)
               if((c!='X'&&c!='Z')&&(a!=b&&a!=c&&b!=c))
        {
        printf("a matches %c\n",a);
        printf("b matches %c\n",b);
        printf("c matches %c\n",c);
        }
        else  continue;   
        }

    }
2014-10-27 14:44
yibanguaiqi
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2014-10-20
收藏
得分:0 
回复 3 楼 fan200953
可是若是换成printf("A对手%c\nB对手%c\nC对手%c\n",a,b,c-1)  就体现不出算法的核心了啊,这是在拼凑答案啊。     还有那个你说的如果不break的情况,我不太懂啊,能讲讲么?
2014-10-27 23:23
fan200953
Rank: 2
等 级:论坛游民
帖 子:18
专家分:30
注 册:2012-9-1
收藏
得分:0 
分析有点复杂,听我慢慢道来,首先
第一轮循环,a=x,b=x,c=x,循环到末尾的时候,a=x,b=z,c=z,这个理解?
 但是c此时执行了一个c++,就应该是char c  的下一个字符  这个理解?
  也就是说你下一次执行的时候,c预置的是'[' 这个字符   这个理解?

如此循环,当a=y,b=z,c=z时,依然不满足,继续循环  这个理解?
因为最外层c的循环又执行了C++, 此时已经跳到b的哪层循环了,c预存的字符是'[';  这个理解?

接下来是a=z,b=x,此时记住 z是上一次循环时的'['   满足你的If条件,所以跳出了循环  【关键点在这里!!】
此时输出的就是  a对z,b对x,c对[    

我用contine 跟你Break是一个道理, 我只是跳出内层循环,你是直接跳出所有循环。我觉得你那种方法执行时间上肯定更长,效率不是很高。
你的程序相当于给a,b,c赋值一次,就判定一次。我那样写,直接跳过了几次不满足的赋值,再来对比。感觉效率要高点。你判定都是3x3x3=27次。
我只判定3x2x1=6次。


我应该讲的很细致了吧?不明白再问吧。。同是新手,做汽车设计的只是喜欢C在自己学,哈哈。
2014-10-28 11:16
yibanguaiqi
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2014-10-20
收藏
得分:0 
回复 5 楼 fan200953
恩,恩,谢谢啊,谢谢啊!!!!!!!  能留个Q么?  以后多多交流。
2014-10-28 13:43
fan200953
Rank: 2
等 级:论坛游民
帖 子:18
专家分:30
注 册:2012-9-1
收藏
得分:0 
回复 6 楼 yibanguaiqi
345704007
2014-10-28 14:47
快速回复:两个队伍比赛乒乓球的问题。
数据加载中...
 
   



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

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