标题:一道强逻辑的题目,大家来试试
只看楼主
encounter
Rank: 5Rank: 5
来 自:扬州
等 级:职业侠客
威 望:2
帖 子:150
专家分:359
注 册:2010-7-24
得分:5 

先把目标排序
这样就能很容易找出间接目标(排序后的数)

然后就那么几种可能还不好找
最多就4!

ping   nbtstat   netstat   tracert    nat   at    ftp   telnet..................
2010-09-05 10:35
小旬_C
Rank: 2
等 级:论坛游民
帖 子:72
专家分:33
注 册:2010-7-25
得分:0 
还是看看大家怎么说吧

没有失败,只有暂时停止成功
2010-09-05 11:47
vandychan
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
等 级:贵宾
威 望:18
帖 子:2296
专家分:6418
注 册:2010-8-20
得分:0 
以下是引用encounter在2010-9-5 10:35:27的发言:


先把目标排序
这样就能很容易找出间接目标(排序后的数)

然后就那么几种可能还不好找
最多就4!
有没具体算法描述?

到底是“出来混迟早要还”还是“杀人放火金腰带”?
2010-09-05 13:01
sunyh1999
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:14
帖 子:1178
专家分:3032
注 册:2009-5-17
得分:0 
回复 41楼 真我
把你用笔的思路写上来,我来试试写代码

欢迎来到我的博客:http://blog..cn/noisunyuhong
2010-09-05 14:06
御坂美琴
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:魔術の禁書目錄
等 级:小飞侠
威 望:9
帖 子:952
专家分:2929
注 册:2010-8-18
得分:5 
以下是引用sunyh1999在2010-9-5 10:01:17的发言:

这个题目要最优解,不知贪心可否

错了吧,不是要最优解,是要最坏情况下的次数尽可能小,和要平均期望值尽可能小

永远为正义而奋斗,锄强扶弱的Level 5 超能力者
とある魔術の禁書目錄インデックス__御み坂さか美み琴こと
http://bbs.bccn.net/space.php?action=threads&uid=483997
2010-09-05 14:17
真我
Rank: 4
等 级:业余侠客
威 望:1
帖 子:146
专家分:210
注 册:2010-7-14
得分:20 
思路如下:可靠次数M,对应可选择数组范围kx[],数组的个数N 链表结点数用jd,结点取最大位数jm,排斥的数组MM[],数组的取值任何两个数组的组合,可以是00,01或11
第一次选择 :可以选择4次的数有9个(1-9),选择3次的数为1个0, 从有最大次数选择的数中取出4个(贪心),先选择不相同(排斥),假设取1234
             根据答案判断,用X表示答案1,Y表示答案2,答案是否合理:满足发下条件(0<=X<5)且(Y<X))或(Y=X=0),
第一次判断:
             switch(Y)
                   case 3:猜对了,break;
                   case 2: 必有123或234
                          switch(x)
                               {case 4:  只有两种可能4123,2341                                                      
                                case 3:  取1235再判断  
                           }break
                  
                  case 1: 必有12 23 34 中的一个,且不存在123和234 
             switch(x)
                               {case 4:  只能是1234的排列,用1243再判断
                                case 3:  在[1234}选 3个,{567890}只能取1个用1245判断
                                case 2:  在[1234]中选两个,{567890}中选2个用1256判断   
                             }break
          case 0: switch(x)无12,23,34
                               {case 4:  只能是1234的排列,用1324判断
                                case 3:  在[1234}选 3个,{567890}只能取1个,用1132判断
                                case 2:  在[1234]中选两个,{567890}中选2个,用5678判断
                                case 1: 在[1234}中取1个,{567890}取3个,用5678判断 
                               case  0:  丢弃[1234},在{56789}中取4个,用5678判断
                             }break
第二次判断:想必LZ你也会找到规律了
                     
                                                   
                                          
2010-09-05 15:41
卧龙孔明
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:59
帖 子:3872
专家分:684
注 册:2006-10-13
得分:5 
做一个筛然后在筛上搜索。

优化方法:
1.搜索中部分贪心而不用全局最优,实践中这样效果和全局最优相差不大。
2.搜索中固定根即浅层节点。

My Blog: www.aiexp.info
虽然我的路是从这里开始的,但是这里不再是乐土.感谢曾经影响过,引导过,帮助过我的董凯,飞燕,leeco,starwing,Rockcarry,soft_wind等等等等.别了,BCCN.
2010-09-05 16:03
卧龙孔明
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:59
帖 子:3872
专家分:684
注 册:2006-10-13
得分:0 
lz有兴趣的话在fyoj上我记得有两个这样的交互题。

My Blog: www.aiexp.info
虽然我的路是从这里开始的,但是这里不再是乐土.感谢曾经影响过,引导过,帮助过我的董凯,飞燕,leeco,starwing,Rockcarry,soft_wind等等等等.别了,BCCN.
2010-09-05 16:04
真我
Rank: 4
等 级:业余侠客
威 望:1
帖 子:146
专家分:210
注 册:2010-7-14
得分:5 
补充一下结点数=(4-Y)(
2010-09-05 17:23
以中
Rank: 3Rank: 3
来 自:长沙
等 级:论坛游侠
帖 子:108
专家分:129
注 册:2010-4-13
得分:0 
这题我已前做过,代码如下:
#include "stdio.h"
#include "stdlib.h"
#include "time.h"
#define N1000 (int)count2/1000
#define N100 (int)(count2-N1000*1000)/100
#define N10 (int)(count2-N1000*1000-N100*100)/10
#define N1 (int)(count2-N1000*1000-N100*100-N10*10)

void main()
{
    int j[4];
    int count1;
    int count2=0;
    int k=0;
    srand(time(0));
    for(int i=0;i<4;i++)
    j[i]=rand()%5;
    count1=j[0]*1000+j[1]*100+j[2]*10+j[3];
    printf("猜数字游戏开始!\n");
    while(count2!=count1)
    {
    printf("输入:");
    scanf("%d",&count2);
    if(N1000==j[0])
    {
        k++;
        printf("千位相同\n");
    }
        if(N100==j[1])   
        {   
            k++;
            printf("百位相同\n");
        }
            if(N10==j[2])
            {    k++;
                printf("十位相同\n");
            }
                if(N1==j[3])
                    
                {   
                    k++;
                    printf("个位相同\n");
                }
                printf("有%d位相同\n",k);
                if(k==4)
                    printf("恭喜你猜中了!\n");
                k=0;

   
    }
}

道之所存,师之所存。
2010-09-06 19:42



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




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

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