300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > c语言12个球取8个 08年计算机二级考试C语言辅导:12个球的程序

c语言12个球取8个 08年计算机二级考试C语言辅导:12个球的程序

时间:2023-11-13 00:15:39

相关推荐

c语言12个球取8个 08年计算机二级考试C语言辅导:12个球的程序

有12个外表一模一样的小球,其中有一个的质量和其他11个球不一样(11个球的质量完全相同),而且该球不知道是轻点还是重点。现在给你一个天平(无砝码),只有3次测量机会,请你找出该球。球号从a到l(小写)

#include

#include

#include

#defineLETTER_HEAD97//a的起始

#defineBALL_NUM12//球个数

#defineNORMAL_WEIGHT2//一般球的重量

#defineHIGH_WEIGHT3//球超重

#defineLOW_WEIGHT1//球失重...

#defineLOOP3//循环次数(可称几次)

#defineFALSE-1

#defineTRUE0

intbadBallWeight;

charbadBall;

//得到坏球的字符

chargetBadBall()

{

srand((unsigned)time(NULL));

return(char)(random()ºLL_NUM+LETTER_HEAD);

}

//得到坏球的重量

voidgetBadBallWeight()

{

inttype;

srand((unsigned)time(NULL));

type=random()%2;

if(1==type)

{

badBallWeight=HIGH_WEIGHT;

}

else

{

badBallWeight=LOW_WEIGHT;

}

}

//开启了debug后返回FALSE

intdebug(char*str)

{

if(strcmp(str,"exit")==0)

{

exit(0);

}

if(strcmp(str,"cheat")==0)

{

printf("CHEAT:badballis%c,weightis%d\n",badBall,badBallWeight);

returnFALSE;

}

returnTRUE;

}

//验证球的名字,不在a-l之间的返回FALSE

intverifyBallsName(char*str)

{

char*p;

for(p=str;*p!=’\0’;p++)

{

if(*p’l’)

{

returnFALSE;

}

}

returnTRUE;

}

//验证一侧的球有无重复,重复返回FALSE

intverifySingleRepeat(char*str)

{

char*p,*temp;

intrepeat;

for(p=str;*p!=’\0’;p++)

{

repeat=0;

for(temp=str;*temp!=’\0’;temp++)

{

if(*p==*temp)

repeat++;

}

if(repeat>1)

returnFALSE;

}

returnTRUE;

}

//验证一侧的错误性有错打印并返回FALSE,无错返回有几个球

intverifySingle(char*str)

{

interr;

err=debug(str);

if(FALSE==err)

returnFALSE;

err=verifyBallsName(str);

if(FALSE==err)

{

printf("\nERROR:ballsnameerror(Usage:abcdefghijkl)\n");

returnFALSE;

}

err=verifySingleRepeat(str);

if(FALSE==err)

{

printf("\nERROR:ballsnamerepeat\n");

returnFALSE;

}

returnTRUE;

}:

//得到单侧的重量

intgetSingleWeight(char*str)

{

intballsNum,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);

}

intverifyMultiBallName(char*leftStr,char*rightStr)

{

char*l,*r;

for(l=leftStr;*l!=’\0’;l++)

{

for(r=rightStr;*r!=’\0’;r++)

{

if(*l==*r)

returnFALSE;

}

}

returnTRUE;

}

intmain()

{

intloopTime,err;

intleftWeight,rightWeight;

charleft[128],right[128];

charbad[16];

printf("有12个外表一模一样的小球,其中有一个的质量和其他11个球不一样(11个球的质量完全相同),\

而且该球不知道是轻点还是重点。现在给你一个天平(无砝码),只有3次测量机会,请你找出该球。球号从a到l(小写)\n");

badBall=getBadBall();

getBadBallWeight();

for(loopTime=1;loopTime<=LOOP;loopTime++)

{

printf("plsinputleftballs:");

scanf("%s",left);

err=verifySingle(left);

if(FALSE==err)

gotoerror;

leftWeight=getSingleWeight(left);

printf("plsinputrightballs:");

scanf("%s",right);

err=verifySingle(right);

if(FALSE==err)

gotoerror;

rightWeight=getSingleWeight(right);

err=verifyMultiBallName(left,right);

if(FALSE==err)

{

printf("\nERROR:oneballbothinleftandright\n");

gotoerror;

}

if(leftWeight>rightWeight)

{

printf("result%d:left>right\n",loopTime);

}

elseif(leftWeight

{

printf("result%d:left

}

else

{

printf("result%d:left=right\n",loopTime);

}

continue;

error:

loopTime--;

}

printf("plsinputthebadballname:");

scanf("%s",bad);

if(*bad==badBall)

{

printf("\ncongratulation,yourselectedisright!\n");

}

else

{

printf("\nsorry,yourselectediswrong!\n");

}

return0;

}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。