计算机二级考试C语言辅导:12个球的程序
来源:优易学  2011-12-10 17:23:27   【优易学:中国教育考试门户网】   资料下载   IT书店

有12个外表一模一样的小球,其中有一个的质量和其他11个球不一样(11个球的质量完全相同),而且该球不知道是轻点还是重点。现在给你一个天平(无砝码),只有3次测量机会,请你找出该球。球号从a到l(小写)
#include
#include
#include
#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()ºLL_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之间的返回FALSE
int verifyBallsName(char* str)
{
char* p;
for(p = str; *p != ’\0’; p++)
{
if(*p<’a’ || *p>’l’)
{
return FALSE;
}
}
return TRUE;
}

//验证一侧的球有无重复,重复返回FALSE
int 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;
}

[1] [2] 下一页

责任编辑:小草

文章搜索:
 相关文章
热点资讯
资讯快报
热门课程培训