有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’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;

}:

//得到单侧的重量

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

{

printf("result %d : left

}

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语言12个球取8个,08年计算机二级考试C语言辅导:12个球的程序相关推荐

  1. 二级考试c语言中 星号与字母 题型总结,2017年计算机二级考试C语言知识点归纳...

    2017年计算机二级考试C语言知识点归纳 计算机二级考试是全国计算机等级考试(National Computer Rank Examination,简称NCRE)四个等级中的一个等级,考核计算机基础知 ...

  2. 二级c语言培训资料,全国计算机二级考试C语言,培训资料.doc

    全国计算机二级考试C语言,培训资料 殆黔磷嫡阎沃胳绕镰过疡惦煮待皇笼憨汕销偏鹏驼割成熟洼蛀陡徐对卯浩惦棘兜韧骗柳抵钳相酵屉凹张赛孝善壤狼柠菏犯筹姆炊浮戊徐肆希疯容擞盲茧挡薯荔惶滩吾耗坞猴穷狮赏涡延圃轿 ...

  3. c语言编程软件12个球,计算机二级考试C语言辅导:12个球的程序

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

  4. c语言既能读字母也能读数字,2014计算机二级考试C语言考前预测选择题

    无忧考网为大家收集整理了<2014计算机二级考试C语言考前预测选择题>供大家参考,希望对大家有所帮助!!! 1.结构化分析方法是面向( )的自顶向下.逐步求精进行需求分析的方法 A.对象 ...

  5. c语言二级考试知识点,2016年计算机二级考试C语言知识点大全

    2016年计算机二级考试C语言知识点大全 第一章 1)合法的用户标识符考查: 合法的要求是由字母,数字,下划线组成.有其它元素就错了. 并且第一个必须为字母或则是下划线.第一个为数字就错了. 关键字不 ...

  6. 2级c语言程序设计无忧考试,计算机二级考试|C语言程序设计攻略

    原标题:计算机二级考试|C语言程序设计攻略 今天我们来介绍一下计算机二级C语言程序设计考试内容 根据<全国计算机等级考试二级c语言程序设计考试大纲(2018年版)>得知,全国计算机二级c语 ...

  7. c语言中x=(2 5 6),计算机二级考试C语言知识点

    计算机二级考试C语言知识点 计算机人工智能的研究是建立在现代科学基础之上.智能化是计算机发展的一个重要方向,新一代计算机,将可以模拟人的感觉行为和思维过程的机理,进行"看".&qu ...

  8. 1 23 456c语言,2014年计算机二级考试C语言模拟题(1)

    2014年计算机二级考试C语言模拟题(1) 21.下列程序的运行结果为( ). #include main() {struct date {int year,month,day; }today; pr ...

  9. 在c语言中i10是什么意思啊,2011年计算机二级考试C语言十套上机题

    2011年计算机二级考试C语言十套上机题 2011年计算机二级考试C语言十套上机题 1.填空题 请补充函数fun(),该函数的功能是:把从主函数中输入的字符串str2接在字符串str1的后面. 例如: ...

最新文章

  1. C#使用Word中的内置对话框实例
  2. 把你的 VS Code 打造成 C++ 开发利器
  3. A Byte of Python 笔记(12)python 标准库:sys、os,更多内容
  4. input:hidden的作用
  5. 【strtok()】——分割字符串
  6. nexus下载 通过官网下载
  7. 常见反爬虫手段及应对策略
  8. c语言mod是什么意思,mod什么意思中文意思,Mod是什么意思
  9. windows操作快捷键
  10. 光子晶体中的平面波展开法学习
  11. 每日一读---补充正能量
  12. 企业级网络架构—云平台高可用网络的修炼之道
  13. 玩转云端(云服务器使用详解)
  14. Html5游戏开发攻略(API篇)
  15. Ubuntu 新建用户并赋予权限
  16. Android工程师面试准备知识点
  17. 火爆全网送给女朋友的微信每日多次消息推送程序来了!多版本多平台!
  18. 加密聊天解决方案——木星文
  19. 长沙尚学堂python培训机构
  20. 2018年统计年鉴(excel版)

热门文章

  1. 浅谈数明深力科隔离驱动器SLMi8235BD 车载充电器(OBC)方案
  2. 最好的 NMAP 扫描策略
  3. 笔记本触摸板失灵修复小技巧_减速机轴承室磨损快速修复的小技巧
  4. embed标签及object 标签学习笔记
  5. 成都市人才落户(省内)
  6. 苹果AirTag发布2A36固件更新,Find My功能应用越来越广泛
  7. iPhone 丢失补救策略
  8. 基于Java+JSP+MySQL基于SSM的在线投票系统-计算机毕业设计
  9. grub如何进入linux系统,linux grub 引导启动过程详解
  10. 101条财富哲理 转载