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;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值