| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1127 人关注过本帖
标题:质疑一个不怎么难的问题
只看楼主 加入收藏
taozztzz
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:85
专家分:180
注 册:2008-12-21
结帖率:83.33%
收藏
已结贴  问题点数:10 回复次数:3 
质疑一个不怎么难的问题
以下是从书上节选的内容(OCR扫描上来的,可能会有点小错误):

1.3个人比饭量大,每个人说了两句话。
A说:B比我吃得多,C和我吃得一样多。
B说:A比我吃得多,A也比C吃得多。
C说:我比B吃得多,B比A吃得多。

事实上饭量越小的人讲对的话越多。请编程按饭量的大小输出3
个人的顺序。

[算法分析]

首先,把每个人的饭量分别用整数1,2,3来表示,数字越大就表
示这个人的饭量越大,由于题目中A说的话中提到了有可能两个人的
饭量相同,也就是说代表3个人饭量的数字有可能相等。

用一个三重循环来枚举每个人的饭量,分别用A,B,C表示这3
个人的饭量。将这3个人说的话As,Bs,Cs写成表达式:

As=(B>A)+(C==A);
Bs=(A>B)+(A>C) ;
Cs=(C>B)+(B>A) ;

根据题意,饭量越小的人讲对的话越多,也就是说,不存在两个
人,其中一个人的饭量比另一个人小,且说对的话不比另一个人多。
当变量满足这个条件时,就可以输出这组解了。

[参考程序]

#include <iostream>
using namespace std;

int main()
{
    int A, B, C;    //定义3个人的饭量
    int As, Bs, Cs;    //定义3个人说的话
    int AnsA, AnsB, AnsC;    //用于记录最后的答案
    for (A = 1; A <= 3; A++)
        for (B = 1; B <= 3; B++)
            for (C = 1; C <= 3; C++)
            {
                As = (B>A) + (C==A);    //A讲的话
                Bs = (A>B) + (A>C) ;    //B讲的话
                Cs = (C>B) + (B>A) ;    //C讲的话
                if(!(A <= B && As <= Bs || A <= C && As <= Cs ||
                      B <= A && Bs <= As || B <= C && Bs <= Cs ||
                      C <= A && Cs <= As || C <= B && Cs <= Bs))
                //如果不存在一个人饭量比另一个人小,说对的话也不比另一个人多,则记录下这时的解
                {
                    AnsA = A;
                    AnsB = B;
                    AnsC = C;
                }
            }
    //输出部分省略
    return 0;
}


我觉得加红的代码很奇怪,题目之前说过“代表3个人饭量的数字有可能相等”,那么类似 A == B && As == Bs 的情况是有可能出现的,而这种情况恰是 A <= B && As <= Bs 的一个子集,这是相矛盾的。我觉得按照“如果不存在一个人饭量比另一个人小,说对的话也不比另一个人多,则记录下这时的解”这个条件,加红的部分,"="号应该全部去掉。

请大家帮忙看看,谢谢!                  
 
2010-08-06 20:30
lijm1989
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:珠海
等 级:贵宾
威 望:12
帖 子:675
专家分:2844
注 册:2009-10-14
收藏
得分:5 
个人意见,都说得通,但推荐书上的。。。
事实上饭量越小的人讲对的话越多。看这句话怎么理解了~~~
2010-08-07 01:01
taozztzz
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:85
专家分:180
注 册:2008-12-21
收藏
得分:0 
但是我觉得书上说得完全没有道理啊!能解释一下吗?

胜利是唯一的信仰!
2010-08-13 19:48
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:5 
C 版有个和这个有点像的问题。https://bbs.bccn.net/viewthread.php?tid=315556&page=1
鉴于那边关注的人可能多些,你要以去参考一下。
2010-08-13 23:25
快速回复:质疑一个不怎么难的问题
数据加载中...
 
   



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

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