标题:Devil_W,来做做题
只看楼主
Windy0Winll
Rank: 2
来 自:走了
等 级:等待验证会员
帖 子:71
专家分:90
注 册:2010-8-26
结帖率:100%
已结贴  问题点数:20 回复次数:29 
Devil_W,来做做题
我来这个论坛也不久,虽然这里的人比我以前在的那个论坛的要多.但我还是要觉得以前那个论坛更亲切,那里的人都很和睦,里面真正的大牛们总是非常耐心的为我们这些初学者解答很菜的问题.在那里我学到了很多东西.不过最近变得异常冷清,才不得已来了这里.这里总能看到你们互相口水战.哎.....

说实话,我对您的水平十分钦佩.下面是我在以前论坛上发表过的一个题目,您也来做做,(原帖 http://bbs.)
  要求:时间空间复杂度不限,要C语言代码(我能勉强看懂C++,但我很不喜欢C++,不要告诉我您C代码都写不出),对于下面的n的取值小于200.不管您用什么算法,当然也可以事先把1到200的情况全部求出来在用穷举法给出也可以.我从没去学过什么算法,所以只要答案就可以了.


原题: 有12个球,其中有1个求的质量不同与其他11个,或轻或重,无法通过外表和手感感觉得出来,现有一天平。允许称量3次,考虑最坏情况,找出那个质量问题球。说出称量方法(有2中方法)。可能原题比较简单,现把题目该为:
     1. 如果有n个球,其他条件同上,问称量几次一定能找出那个质量问题球。
    // 2. 如果有允许称量m次,其他条件同上,问最多可以从多少个球中找出问题球。 //这两个题目随您做一个就可以了
搜索更多相关主题的帖子: Devil 
2010-09-14 11:26
hahayezhe
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:湖南张家界
等 级:贵宾
威 望:24
帖 子:1386
专家分:6999
注 册:2010-3-8
得分:1 
这题目...无语了! 4 4 4
2010-09-14 11:29
kingsroot
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:1
帖 子:284
专家分:1159
注 册:2010-3-28
得分:1 
哇  火药味真浓哦~~~
2010-09-14 11:29
Windy0Winll
Rank: 2
来 自:走了
等 级:等待验证会员
帖 子:71
专家分:90
注 册:2010-8-26
得分:0 
反正这个论坛我也不想呆下去了,所以就随便了...

悄悄地来。。。 然后悄悄地走。。。。。。
2010-09-14 11:33
A13433758072
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:广东潮州
等 级:小飞侠
威 望:1
帖 子:1182
专家分:2784
注 册:2010-7-22
得分:1 
Pk现在流行这个顺便。。活跃活跃群的气氛。。。。。。12个球的程序..... 作者: hao0716 阅读人次: 14314 文章来源:本站原创    发布时 间:2008-4-21网友评论( 91 )条 原帖及讨论: https://bbs.bccn.net /thread-210214-1-1.html微软的一道题目...上班很无聊 写 来玩玩有12个外表一模一样的小球,其 中有一个的质量和其他11个球不一样(11个球的质量完全相同),而且该球不知道是轻点还是重点。现在给你一个天平(无砝码),只有3次测量机会,请你找出该球。球号从a到l(小写)#include <stdio.h> #include<time.h> #include<stdlib.h> #define LETTER_HEAD 97      //a的起 始#define BALL_NUM 12         //球个数 #define NORMAL_WEIGHT 2     //一般 球的重量#define HIGH_WEIGHT 3       //球超重 #define LOW_WEIGHT 1        //球失 重...#define LOOP 3              //循环次数 (可称几次)#define FALSE -1 #define TRUE 0 int badBallWeight; char badBall; //得到坏球的字符 char getBadBall() {     srand((unsigned)time(NULL));     return (char) (random()%BALL_NUM+LETTER_HEAD);} //得到坏球的重量 void getBadBallWeight() {     int type;     srand((unsigned)time(NULL));     type = random()%2;     if(1==type)     {         badBallWeight = HIGH_WEIGHT;     }     else     {         badBallWeight = LOW_WEIGHT;     } } //开启了debug后 返回FALSE int debug(char* str) {     if(strcmp(str, "exit") == 0)     {         exit(0);     }     if(strcmp(str, "cheat") == 0)     {         printf("CHEAT : bad ball is %c,  weight is %d\n", badBall, badBallWeight);        return FALSE;     }     return TRUE; } //验证球的名字,不在a-l之间的 返回FALSEint verifyBallsName(char* str) {     char* p;     for(p = str; *p != '\0'; p++)     {         if(*p<'a' || *p>'l')         {             return FALSE;         }     }     return TRUE; } //验证一侧的球有无重复,重复返 回FALSEint verifySingleRepeat(char* str) {     char* p, *temp;     int repeat;     for(p = str; *p != '\0'; p++)     {         repeat = 0;         for(temp = str; *temp != '\0';  temp++)        {             if(*p == *temp)                 repeat++;         }         if(repeat > 1)             return FALSE;     }     return TRUE; } //验证一侧的错误性 有错打印并 返回FALSE,无错返回有几个球int verifySingle(char* str) {     int err;     err = debug(str);     if(FALSE == err)         return FALSE;     err = verifyBallsName(str);     if(FALSE == err)     {         printf("\nERROR: balls name  error (Usage:abcdefghijkl)\n");        return FALSE;     }     err = verifySingleRepeat(str);     if(FALSE == err)     {         printf("\nERROR: balls name  repeat\n");        return FALSE;     }     return TRUE; } //得到单侧的重量 int getSingleWeight(char* str) {     int ballsNum, haveBadBall;     char* p;     ballsNum = strlen(str);     haveBadBall = 0;     for(p = str; *p != '\0'; p++)     {         if(*p == badBall)             haveBadBall++;     }     return ((ballsNum- haveBadBall)*NORMAL_WEIGHT+haveBadBall*badBallWeight);} int verifyMultiBallName(char* leftStr,  char* rightStr){     char *l, *r;     for(l = leftStr; *l != '\0'; l++)     {         for(r = rightStr; *r != '\0'; r++)         {             if(*l == *r)                 return FALSE;         }     }     return TRUE; } int main() {     int loopTime, err;     int leftWeight, rightWeight;     char left[128],right[128];     char bad[16];     printf("有12个外表一模一样的 小球,其中有一个的质量和其他11个球不一样(11个球的质量完全相同),\    而且该球不知道是轻点还是重 点。现在给你一个天平(无砝码),只有3次测量机会,请你找出该球。球号从a到l(小写)\n");    badBall = getBadBall();     getBadBallWeight();     for(loopTime = 1; loopTime <=  LOOP; loopTime++)    {         printf("pls input left balls:   ");         scanf("%s", left);         err = verifySingle(left);         if(FALSE == err)             goto error;         leftWeight =  getSingleWeight(left);        printf("pls input right balls:   ");         scanf("%s", right);         err = verifySingle(right);         if(FALSE == err)             goto error;         rightWeight =  getSingleWeight(right);        err = verifyMultiBallName(left,  right);        if(FALSE == err)         {             printf("\nERROR: one ball  both in left and right\n");            goto error;         }         if(leftWeight > rightWeight)         {             printf("result %d : left >  right\n", loopTime);        }         else if(leftWeight < rightWeight)         {             printf("result %d : left <  right\n", loopTime);        }         else         {             printf("result %d : left =  right\n", loopTime);        }         continue; error:         loopTime--;     }     printf("pls input the bad ball  name:");    scanf("%s", bad);     if(*bad == badBall)     {         printf("\ncongratulation,your  selected is right!\n");    }     else     {         printf("\nsorry,your selected is  wrong!\n");    }     return 0; } 文章录入:静夜思    责任编辑: 静夜思

一步一个脚印...............................默默地前进.....
诚邀乐于解答c菜鸟问题,的热心网友加入,  QQ群38490319
2010-09-14 11:37
Windy0Winll
Rank: 2
来 自:走了
等 级:等待验证会员
帖 子:71
专家分:90
注 册:2010-8-26
得分:0 
回复 5楼 A13433758072
这个帖子我看过了,原来代码的思路很清晰,并没有给出称量方法,对于12个球的情况还比较简单,我以前给出个一段代码,看懂了的话可以知道里面有一种方法.并且现在这个题比原来的不只难一点点了,如果数学不好的不要去浪费时间了.
我把原来那段代码上传过来.
12个球的问题.rar (2.29 KB)

悄悄地来。。。 然后悄悄地走。。。。。。
2010-09-14 11:47
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
得分:1 
以下是引用Windy0Winll在2010-9-14 11:47:14的发言:
如果数学不好的不要去浪费时间了.
感谢你的提醒

我就是真命天子,顺我者生,逆我者死!
2010-09-14 12:43
vandychan
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
等 级:贵宾
威 望:18
帖 子:2296
专家分:6418
注 册:2010-8-20
得分:1 
为什么就针对Devil_W,啊?

到底是“出来混迟早要还”还是“杀人放火金腰带”?
2010-09-14 12:44
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
得分:0 
以下是引用vandychan在2010-9-14 12:44:08的发言:

为什么就针对Devil_W,啊?
同问 !

我就是真命天子,顺我者生,逆我者死!
2010-09-14 12:57
vandychan
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
等 级:贵宾
威 望:18
帖 子:2296
专家分:6418
注 册:2010-8-20
得分:0 
以下是引用BlueGuy在2010-9-14 12:57:47的发言:

同问 !
BG 和DW 其实是同一类人的吧

到底是“出来混迟早要还”还是“杀人放火金腰带”?
2010-09-14 13:12



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




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

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