MOOC清华《程序设计基础》第2章:猜数游戏(from 1 to n)
//******************************************* //程序名:GuessNumber(from1to_n) //功 能:玩家心中想1到n中的一个数, // 给出若干张卡片,让玩家说出哪几张 // 卡片上有这个数,然后计算机便能 // 判断出是哪个数 //编制人:刘聪 //时 间:2017年5月27日 //******************************************* #include <iostream> #include <cmath> using namespace std; int main() { int n, Binary, bit, bit_weight, counter, judge, Number, boundary; int division_times, card_number, take_remainder, take_quotient, i, j, k; int DecimalToBinary(int n); n = 0; Binary = 0; bit = 0; bit_weight = 1; counter = 0; judge = 0; Number = 0; boundary = 0; division_times = 0; card_number = 0; take_remainder = 1; take_quotient = 1; i = 0; j = 0; k = 0; cout<<"猜数游戏开始!请确定猜数的范围上界n:"; cin>>boundary; while(boundary >511) { cout<<endl<<"上界溢出错误(大于511)!请重新确定猜数的范围上界n:"; cin>>boundary; } for(division_times = 1, i = boundary; i / 2 != 0 ; division_times++) { i = i / 2; } cout<<endl<<"请在心中默想一个1到"<<boundary<<"之间的整数,"<<endl <<"请看以下0#到"<<division_times<<"#,共"<<division_times + 1<<"张卡片,是否有您所想的数字。"<<endl <<"若有,请说“1”;若无,请说“0”。"<<endl; for(card_number = 0; card_number < division_times; card_number++) { cout<<endl<<"卡片 "<<card_number<<"#:"<<endl; for(i = 0, take_remainder = 1; i <= card_number ; i++) take_remainder = take_remainder * 10; for(j = 0, take_quotient = 1; j < card_number ; j++) take_quotient = take_quotient * 10; for(n = 1; n <= boundary; n++) { Binary = DecimalToBinary(n); bit = Binary % take_remainder / take_quotient; if(bit == 1) { cout<<n<<'\t'; counter++; } if(counter == 5) { cout<<endl; counter = 0; } if((n == boundary) && (counter != 0)) cout<<endl; if(n == boundary) counter = 0; } cout<<"这张表有你想的数字吗?:"; cin>>judge; for(k = 0, bit_weight = 1; k < card_number ; k++) bit_weight = bit_weight * 2; if(judge == 1) { Number = bit_weight * 1 + Number; cout<<endl; } else { if(judge == 0) { Number = bit_weight * 0 + Number; cout<<endl; } else cout<<"输入错误。"; } } cout<<"您所猜的数字是:"<<Number<<endl; return 0; } int DecimalToBinary(int n) { int counter, quotient, remainder, Binary, i; counter = 0; quotient = 0; remainder = 0; Binary = 0; i = 0; while((quotient = n / 2 ) > 0) { remainder = n % 2; n = quotient; counter++; if(remainder == 1) { for(i = counter; i > 1; i--) remainder = remainder * 10; Binary = remainder + Binary; } } remainder = 1; counter++; for(i = counter; i > 1; i--) remainder = remainder * 10; Binary = remainder + Binary; return Binary; }
软件业务请联系QQ:3121432464“正聪科技客服”
posted on 2017-10-05 18:17 sunshineman1986 阅读(77) 评论(0) 编辑 收藏 举报