[.cpp]位运算程序设计_找出判断题答案
来源:互联网 发布:淘宝怎么搜好看的衣服 编辑:程序博客网 时间:2024/06/05 20:13
题目
有3名同学做10道判断题,三人的答案如下表
阅卷结果显示,三名同学每人都答对7道题。但在几天之后,题目的正确答案丢失了,现在请你求出这10道判断题的正确答案。(题目保证结果唯一)
分析
因为每人都得到7分,也就是三人的答案中,每人分别与正确答案有7个匹配的,另外有3个不匹配,而与三人的答案之间没有关系,可能某个题三人答案一致,但全都与正确答案不同。我们需要构造一个数据作为答案,分别与三个数作比较。
作为判断题,只有T和F两个答案,用C语言中的位操作来代表答案的状况是非常合适的。
概要设计
本程序可以没有输入,因为三名同学的答案是已知条件,可以设计在程序中当作常量直接用去计算正确答案。共有10个题的判断题,所有答案组合有
那么除了主函数main()之外,应当设计一个检查匹配的函数int match(unsigned int a,unsigned int b),用以比较a与b有多少比特位是一致的,返回值是一致的位数。
int match(unsigned int a,unsigned int b){ int counter=0,i; for(i=0;i<10;i++,a>>=1,b>>=1){//每循环一次就令a与b均向右移一位 if((a&1)==(b&1))//比较当前的最低位 counter+=1; } return counter;}
主函数里就可以设计一个变量current_answer,令它遍历所有可能的答案,同时与三名同学的答案比较,当三个匹配结果都是7时,跳出循环
程序设计
#include <stdio.h>#include <stdlib.h>int match(unsigned int a,unsigned int b){ int i,counter=0; for(i=0;i<10;i++,a>>=1,b>>=1){ if((a&1)==(b&1)) counter+=1; } return counter;}int main(void){ //把三人的答案直接以十六进制保存 int const A_ans=0x01D2, B_ans=0x00EC, C_ans=0x02BB; unsigned current_answer; int k; for(current_answer=0;current_answer<0x400;current_answer++)//从0x0000到0x0400-1包含所有1024个结果 if(match(current_answer,A_ans)==7 && match(current_answer,B_ans)==7 && match(current_answer,C_ans)==7 ) break; for(k=0;k<10;k++){ //得到结果,以T,F的形式输出 if(current_answer&0x0400==1)//只检查第1位的0/1值 printf("T"); else printf("F"); current_answer<<=1;//左移1位,将下一位移到第1位上 } printf("\n"); return 0;}
反思与补充
无
阅读全文
0 0
- [.cpp]位运算程序设计_找出判断题答案
- 黑马程序员_04_算术_转移_逻辑_位_三元_运算符_判断语句
- 位运算---不用任何比较判断找出两个数中的最大值
- 位运算判断奇偶性
- 位运算判断奇偶
- 判断奇偶 位运算
- 位运算判断奇偶
- 程序设计与C语言学习笔记_第十章编译预处理与位运算
- 【C/C++】位运算之找出独苗
- 黑马程序员_位运算
- 5_普通位运算
- 位运算的妙用_判断2的乘方和二进制1的个数
- vijos_高低位交换_位运算
- 位运算 加减乘除 负值判断
- 位与运算判断奇偶性
- 奇偶性[位运算判断方法]
- 程序设计实验一(位运算)
- 13_运算符_01_算术_逻辑_位运算符_扩展运算符
- Map的四种遍历方法
- 面试OR笔试9——1121231234
- 拼写检查
- bzoj2326 [HNOI2011]数学作业
- AI开发实战7-列表显示框(Listview)的定制
- [.cpp]位运算程序设计_找出判断题答案
- centos 下如何修改网卡名称
- 'celery' object has no attribute 'utils
- Linux 忘记密码解决方法
- mysql删除带外键数据问题
- 扑克牌顺子
- mysql installation guide (windows)
- V8 内存分配与垃圾回收
- python调试