正文

[042] 比赛对手2006-03-19 16:50:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/wentao/11170.html

分享到:

<谭> 6.15

两个乒乓球队进行比赛, 各出三人。甲队为A、B、C三人,乙队为X、Y、Z三人。已抽签决定比赛名单。有人向队员打听比赛的名单,A说他不和X比,C说他不和X、Z比。请编程序找出三赛手的名单。

分析:
① X既不与A比,又不与C比,必然与B比;
② C既不与X比,又不与Z比,必然与Y比;
③ A只能与Z比.

以上为逻辑推理得到结论,而用计算机处理此问题,必须对所有组合一一检验,看是否符合条件。

#include <stdio.h>
int   main()
{
    char _A, _B, _C; /* 分别表示A,B,C的对手 */
    for(_A = 'X'; _A <= 'Z'; _A++)
        for(_B = 'X'; _B <= 'Z'; _B++)
            for(_C = 'X'; _C <= 'Z'; _C++)
                if(_A != _B && _A != _C && _B != _C && _A != 'X' && _C != 'X' && _C != 'Z')
                    printf("A--%c\tB--%c\tC--%c\n", _A, _B, _C);
    return 0;
}

运行结果:
==============================
A--Z    B--X    C--Y
==============================

这里为了在运行时能直接打印出字符'X'、'Y'、'Z',  用了字符变量_A,_B,_C 。另外为了减少循环次数,可由外层到内层去除不符合的组合。书中例子如下:

#include <stdio.h>
int   main()
{
    char i, j, k; /* 分别表示A,B,C的对手 */
    for(i = 'X'; i <= 'Z'; i++)
        for(j = 'X'; j <= 'Z'; j++)
            if (i != j)
                for(k = 'X'; k <= 'Z'; k++)
                     if (i != k && j != k)
                        if(i != 'X' && k != 'X' && k != 'Z')
                            printf("A--%c\tB--%c\tC--%c\n", i, j, k);
    return 0;
}

运行结果同上。

考查两个程序循环次数的差异,做如下验证:

#include <stdio.h>
int   main()
{
    char _A, _B, _C, count = 0;
    for(_A = 'X'; _A <= 'Z'; _A++)
        for(_B = 'X'; _B <= 'Z'; _B++)
            for(_C = 'X'; _C <= 'Z'; _C++)
                count++;
    printf("count=%d\n", count);
    return 0;
}

运行结果:
======================
count=27
======================

#include <stdio.h>
int   main()
{
    char i, j, k, count = 0;
    for(i = 'X'; i <= 'Z'; i++)
        for(j = 'X'; j <= 'Z'; j++)
            if (i != j)
                for(k = 'X'; k <= 'Z'; k++)
                    if (i != k && j != k)
                        count++;
    printf("count=%d\n", count);
    return 0;
}

运行结果:
======================
count=6
======================

可见后者循环次数比前者少的多。

阅读(2862) | 评论(4)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

loading...
您需要登录后才能评论,请 登录 或者 注册