循环-猜数字

【题】

猜数字(选作)


有如下一组数字,其中每个数字都在 1 ~ 63 之间,

 1  3  5  7  9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39 41 43 45 47 49 51 53 55 57 59 61 63
 2  3  6  7 10 11 14 15 18 19 22 23 26 27 30 31 34 35 38 39 42 43 46 47 50 51 54 55 58 59 62 63
 4  5  6  7 12 13 14 15 20 21 22 23 28 29 30 31 36 37 38 39 44 45 46 47 52 53 54 55 60 61 62 63
 8  9 10 11 12 13 14 15 24 25 26 27 28 29 30 31 40 41 42 43 44 45 46 47 56 57 58 59 60 61 62 63
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63

现在需要编写一个程序,当从键盘输入某数字在且仅在哪几行出现了,该程序可以“猜”出这个数字是几。

输入:

    程序的输入是一串以空白符分开的数字,当输入 0 时表示输入结束。

输出:

    输出猜到的数字。

  测试输入关于“测试输入”的帮助 期待的输出关于“期待的输出”的帮助 时间限制关于“时间限制”的帮助 内存限制关于“内存限制”的帮助 额外进程关于“{$a} 个额外进程”的帮助
测试用例 1 以文本方式显示
  1. 1 2 0↵
以文本方式显示
  1. 3↵
1秒 64M 0
测试用例 2 以文本方式显示
  1. 2 1 0↵
以文本方式显示
  1. 3↵
1秒 64M 0
测试用例 3 以文本方式显示
  1. 2 4 0↵
以文本方式显示
  1. 10↵
1秒 64M 0

【分析】
         这题涉及到二进制数,对那组数字分析可以发现,第i行中每个数的二进制数值,其第i位都为1。又题意为“ 在且仅在哪几行出现了”,所以猜到的数字对应的二进制数,哪位为1,这个数就在哪行出现。
         例如测试用例3,这个数在2行和4行出现,对应的结果10,10转换为二进制位1010,其有且仅有第2位和4位都为1.

【代码】

#include "stdio.h"
#include "math.h"


int main()
{
	int num;
	int res = 0;
	while (1)
	{
		scanf("%d", &num);
		if (num == 0)
		{
			break;
		}
		getchar();
		res += pow(2, num-1);
	}
	printf("%d\n", res);
    return 0; 
}



评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值