猜数字

H3:猜数字(选作)

有如下一组数字,其中每个数字都在 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 时表示输入结束。

输出:

    输出猜到的数字。



















思路:

每一行数字的二进制表示有一定的规律,第一行的数字其二进制表示的最后一位位1,以此类推,第n行的数字其二进制的倒数n位为1,所以,当输入几个不为0的数字时,表示其在这几行出现,即对应的二进制位为1.

源代码:

#include
#include
int main()
{
	int count=0,n;
	while(1)
	{
		scanf("%d",&n);
		if(n==0)
			break;
		else
			count += pow(2,n-1);
	}
	printf("%d\n",count);
	return 0;
}

你可能感兴趣的:(C/C++)