标题:找比赛名单问题,的小程序求高手?
只看楼主
清微御宇
Rank: 6Rank: 6
来 自:开封
等 级:侠之大者
威 望:2
帖 子:318
专家分:497
注 册:2012-1-15
结帖率:100%
已结贴  问题点数:40 回复次数:9 
找比赛名单问题,的小程序求高手?
甲队ABC3人,乙队YXZ3人,A不和x,c不和xz比,给出3对赛手的名单?

[ 本帖最后由 清微御宇 于 2012-7-4 09:27 编辑 ]
搜索更多相关主题的帖子: 名单 
2012-07-04 09:24
如此悠然
Rank: 2
等 级:论坛游民
帖 子:62
专家分:86
注 册:2012-5-18
得分:0 
骚年,勤加思考吧!!

——————
严谨
2012-07-04 11:34
netlin
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:24
帖 子:544
专家分:4308
注 册:2012-4-9
得分:5 
按这个思路做,应该很容易实现的:
甲队每次出一人,乙队每次出一人,进行组合,
在进行组合时,进行判断,把问题要求的组合忽略掉,把其它的输出就行了。

楼主试一下吧!

做自己喜欢的事!
2012-07-04 16:28
JON_me
Rank: 2
等 级:论坛游民
帖 子:30
专家分:68
注 册:2012-5-4
得分:4 
#include<stdio.h>
int main()
{
    char a[]={'A','B','C'},b[]={'X','Y','Z'};
    int i,j;
    for(i=0;i<3;i++)
        for(j=0;j<3;j++)
        {
            if(b[j]!='X'&&(a[i]!='A'||a[i]!='C'))
                printf("%c\t%c\n",a[i],b[j]);
            if(a[i]=='C'&&(b[j]!='X'||b[j]!='Z'))
            {printf("%c\t%c\n",a[i],b[j]);break;}
        }
        return 0;
}



只是为了练习。

因为爱情,不会轻易悲伤······
2012-07-04 17:16
清微御宇
Rank: 6Rank: 6
来 自:开封
等 级:侠之大者
威 望:2
帖 子:318
专家分:497
注 册:2012-1-15
得分:0 
回复 4楼 JON_me

你调试了吗?目测 A  Y A  Z B  Y B  Z C  X

[ 本帖最后由 清微御宇 于 2012-7-4 19:12 编辑 ]

Stay hungry , Stay foolish!
2012-07-04 19:07
清微御宇
Rank: 6Rank: 6
来 自:开封
等 级:侠之大者
威 望:2
帖 子:318
专家分:497
注 册:2012-1-15
得分:0 
回复 3楼 netlin
甲队每次出一人,乙队每次出一人,进行组合,看起来让甲乙同时出人,两个for可以实现,但把所有隐含条件都挖掘出来if(……),不如直接写
A Z
B X
C Y
有木有其他方法可以轻松实现呢?

Stay hungry , Stay foolish!
2012-07-04 19:23
netlin
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:24
帖 子:544
专家分:4308
注 册:2012-4-9
得分:25 
楼主,你在6楼的回复,让人有些迷惑了!
你的题目是这样给的,如果不是考虑编程的因素,如果这是一道竞赛题,直接写出结果,是最轻松的办法。
另外,你题目中所给条件:A不和x,c不和xz比,不是很容易找出什么规律,最轻松的办法只好用判断语句排除了。

如果一定要让程序通用性强一些,可以把不能组合的情况写到数组中,然后利用循环进行逐条判断。

做自己喜欢的事!
2012-07-05 09:27
netlin
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:24
帖 子:544
专家分:4308
注 册:2012-4-9
得分:0 
以下是引用JON_me在2012-7-4 17:16:30的发言:

#include
int main()
{
    char a[]={'A','B','C'},b[]={'X','Y','Z'};
    int i,j;
    for(i=0;i<3;i++)
        for(j=0;j<3;j++)
        {
            if(b[j]!='X'&&(a!='A'||a!='C'))
                printf("%c\t%c\n",a,b[j]);
            if(a=='C'&&(b[j]!='X'||b[j]!='Z'))
            {printf("%c\t%c\n",a,b[j]);break;}
        }
        return 0;
}



只是为了练习。
4楼 JON_me,这样调整一下,你看看是不是简单一些?
#include
int main(){
    char a[]={'A','B','C'},b[]={'X','Y','Z'};
    int i,j;
    for(i=0;i<3;i++)
        for(j=0;j<3;j++){
            if(b[j]=='X'&&a[i]=='A'||a[i]=='C'&&b[j]=='X'||a[i]&&b[j]=='Z');
            else printf("%c\t%c\n",a[i],b[j]);
        }
}


做自己喜欢的事!
2012-07-05 09:41
q7408695
Rank: 2
等 级:论坛游民
帖 子:22
专家分:50
注 册:2011-8-2
得分:6 
程序代码:
#include <stdio.h>

int main()
{
    int cnt = 0;
    int i, j, k;
    for (i=0; i<3; i++)
    {
        for (j=0; j<3; j++)
        {
            for (k=0; k<3; k++)
            {
                if (0!=i && 0!=k && 2!=k
                    && i!=j && j!=k && k!=i)
                {
                    printf("方案%d:\n", ++cnt);
                    printf("A--%c\n", i + 'X');
                    printf("B--%c\n", j + 'X');
                    printf("C--%c\n\n", k + 'X');
                }
            }
        }
    }

    return 0;
}


思路就是这样,i, j, k比较小,换位置也没什么大的改进,看自己喜好了
2012-07-05 10:01
清微御宇
Rank: 6Rank: 6
来 自:开封
等 级:侠之大者
威 望:2
帖 子:318
专家分:497
注 册:2012-1-15
得分:0 
回复 7楼 netlin
哦,我就是想通用性强点的,看来免不了要写不少判断条件谢谢啦!

Stay hungry , Stay foolish!
2012-07-05 10:21



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-372730-1-1.html




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

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