有如下一组数字,其中每个数字都在 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 时表示输入结束。
输出:
输出猜到的数字。
#include <stdio.h>
int arr[6][32] = {{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}};//预先输入数字
int flag[6][64] = {0};//用于记录每一行中那个数字出现了,该数字就是数组的下标
int line[6] = {0};
int main()
{
int n = 0;
scanf("%d",&n);
int i = 0;
int j = 0;
for (i = 0; i < 6; i++)
{
for (j = 0; j < 32; j++)//每行32个数
{
flag[i][arr[i][j]] = 1;//表示第i+1行arr[i][j]出现
}
}//表示每一行的数字是否有出现1-63中的数字
while (n)
{
line[n -1] = 1;//表示输入的行是哪一行
scanf("%d",&n);
}
for (j = 1; j < 64; j++)//对flag中的每个元素遍历
{
int endnum = 0;
for(int k=0;k<i;k++)
{
if (line[k])//输入的要出现的行数(k从0开始)
{
if (flag[k][j])//如果j出现,endnum=1
{
endnum = 1;
}
else//如果没有出现就找下一个元素:j+1
{
endnum = 0;
break;
}
}
else//其他行不出现某个元素
{
if (!flag[k][j])//如果不出现,flag[i][j]=0;!flag[i][j]=1;这一元素符合条件
{
endnum = 1;
}
else//出现就开始下一个元素的检查
{
endnum = 0;
break;
}
}
}
if (endnum)//如果最终的这个j满足条件,也就是endnum==1,就输出,然后结束程序
{
printf("%d\n", j);
break;
}
}
return 0;
}