| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1015 人关注过本帖
标题:一道看不懂的题目
只看楼主 加入收藏
CCVC果冻爽
Rank: 4
等 级:业余侠客
帖 子:116
专家分:209
注 册:2009-7-31
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:18 
一道看不懂的题目
上头布置下来的:
S先生和P先生
          有两个整数,2到99之间。两个先生S和P, S先生知道这两个数字的和,P先生知道这两个数的乘积,下面是这两个先生的对话:

          S:  我知道,你不知道这两个数字是什么,我也不知道。
          P:  我知道这两个数是什么了。
          S:  我也知道这两个数是什么了。
          请编程求出这两个数字。
我看的是云里雾里,各位大哥能懂不?
搜索更多相关主题的帖子: 大哥 
2009-08-25 11:43
godbless
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:1
帖 子:216
专家分:950
注 册:2009-7-24
收藏
得分:0 
雨中飞燕编过这个程序,以前见到过。
2009-08-25 11:48
xdyuan33
Rank: 3Rank: 3
来 自:广西大学化工学院
等 级:论坛游侠
帖 子:146
专家分:145
注 册:2009-7-24
收藏
得分:0 
百度一下啊我刚百过了一大堆。。S先生和P先生

参与切磋是美德,每天回帖即可获得10分可用分!
2009-08-25 11:55
CCVC果冻爽
Rank: 4
等 级:业余侠客
帖 子:116
专家分:209
注 册:2009-7-31
收藏
得分:0 
以下是引用godbless在2009-8-25 11:48的发言:雨中飞燕编过这个程序,以前见到过。
问题是我没见到过。
2009-08-25 11:57
godbless
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:1
帖 子:216
专家分:950
注 册:2009-7-24
收藏
得分:0 
我的想法:
2到99交错相加,乘,找出积,和不唯一的并且为它们交集的那几个数(应该没几个)。
然后根据两人的话来判断。
2009-08-25 12:02
UserYuH
Rank: 12Rank: 12Rank: 12
来 自:毅华
等 级:火箭侠
威 望:8
帖 子:720
专家分:3300
注 册:2009-8-10
收藏
得分:0 
看样子这题挺好玩的,看起来挺深奥,又看起来像两个SB先生对话,不懂装懂。
推算两位先生的对话。
S:  我知道,你不知道这两个数字是什么,我也不知道。
P:  我知道这两个数是什么了。
S:  我也知道这两个数是什么了。
P:  是吗,那你说是什么数?
S:  干嘛告诉你,你老几呀。
P: 切,明明就不知道,不懂装懂。
S: 我看你才不知道吧,SB一个。
P: 你说什么,敢骂我SB?找死呀。(摧心掌)
S: 先动手?(如来神掌)
……双双阵亡,此后这两个数再也没人知道~!

努力—前进—变老—退休—入土
2009-08-25 12:55
godbless
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:1
帖 子:216
专家分:950
注 册:2009-7-24
收藏
得分:20 
4和13

附上雨中飞燕的程序和链接,就在这个论坛里。
https://bbs.bccn.net/viewthread.php?tid=218719&highlight=%B9%ED%B9%C8

/*****************************************************************
** HighlightCodeV3.0 software by yzfy(雨中飞燕) http:// **
*****************************************************************/
/*
鬼谷子问徒[经典]
孙膑,庞涓都是鬼谷子的徒弟。一天鬼谷子出了这道题目:
他从2到99中选出两个不同的整数,把积告诉孙膑,把和告诉庞涓;
庞涓说:我虽然不能确定这两个数是什么,但是我肯定你也不知道这两个数是什么。
孙膑说:我本来的确不知道,但是听你这么一说,我现在能够确定这两个数字了。
庞涓说:既然你这么说,我现在也知道这两个数字是什么了。
请问这两个数字是什么?为什么?
*/
/*
以下代码,条件1-3分别对应两人依次说的三句话
算法采用最直接最容易理解的穷举验证法
*/

//是否唯一分解(附加条件:分解出的数小于100)
int isOneSolve(int n, int nMax = 100)
{
    int nRet=0; //记录满足本条件数
    for (int nd=2; nd*nd<n; ++nd)
    {
        if ( n%nd==0 && n/nd<nMax)
            if (++nRet>1) return 0;
    }
    return nRet;
}
//条件1,sum的任意和的分拆之积不可能有唯一分解,否则对方可能猜出
int p1(int sum)
{
    if(sum<6) return 0;
    for (int t=(sum-1)/2; t>1; --t)
    {
        if ( isOneSolve(t*(sum-t)) ) return 0;
    }
    return 1;
}
//条件2,只有一种积的分拆满足条件1
int p2(int times2)
{
    int nRet=0; //记录满足本条件数
    for (int nd=2; nd*nd<times2; ++nd)
    {
        if ( times2%nd==0 && p1(nd+times2/nd) )
            if (++nRet>1) return 0;
    }
    return nRet;
}
//条件3,只有一种和的分拆满足条件2
int p3(int sum)
{
    int nRet=0; //记录满足本条件数
    for (int t=(sum-1)/2; t>1; --t)
    {
        if ( p2(t*(sum-t)) )
            if (++nRet>1) return 0;
    }
    return nRet;
}

#include <stdio.h>
//作者:雨中飞燕
int main(int argc, char *argv[])
{
    for (int n=6; n<200; ++n) //穷举和的可能,最大不超过200
    {
        // 其和能同时满足条件1和3者即为结果
        if (p1(n) && p3(n))
        {
            //找出对应解
            for (int t=2; t*2<n; ++t)
            {
                if ( p2(t*(n-t)) ) //分拆结果符合条件2就输出
                    printf("%d %d\n", t, n-t);
            }
        }
    }
    puts("Finish");getchar();return 0;
}

[ 本帖最后由 godbless 于 2009-8-25 14:36 编辑 ]
2009-08-25 14:27
CCVC果冻爽
Rank: 4
等 级:业余侠客
帖 子:116
专家分:209
注 册:2009-7-31
收藏
得分:0 
越看越看不懂。绝望了,main里面还有参数的没见过。
能不能搞个更加通俗易懂的来呢?
2009-08-25 15:32
CCVC果冻爽
Rank: 4
等 级:业余侠客
帖 子:116
专家分:209
注 册:2009-7-31
收藏
得分:0 
以下是引用UserYuH在2009-8-25 12:55的发言:看样子这题挺好玩的,看起来挺深奥,又看起来像两个SB先生对话,不懂装懂。推算两位先生的对话。S:  我知道,你不知道这两个数字是什么,我也不知道。P:  我知道这两个数是什么了。S:  我也知道这两个数是什么了 ...
你滴回复相当雷人。
2009-08-25 15:32
godbless
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:1
帖 子:216
专家分:950
注 册:2009-7-24
收藏
得分:0 
int main(int argc, char *argv[])

这个是main函数的标准写法而已,这个里面的参数在这里没什么用,可以无视.
改成int main()就可以
2009-08-25 15:34
快速回复:一道看不懂的题目
数据加载中...
 
   



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

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