你的题目具体要求是什么啊?
这个显示都是16个数,
第一组是 16-31,数字依次递增1
第二组是 每8个数字一组,第二小组是再第一小组基础上+8
第三、四组是 每4个数字一组
第五组是等差数列
这题目的数字二进制也没看出什么特别的规律。。
你这个题目可以定义一个int a[5][32]的二维数组,并初始化为0,把每组出现的数字再a对应的行中设为1,根据输入的数字选择在所有组中都出现的数字。(这个数字不一定是唯一的,输入1、2、5、-1的时候,25 27 29 31都在3个组中都出现了,25只是第一个出现的数,可能是只输出1个)
代码:
#include <iostream>
using namespace std;
int main()
{
int nmb[5][16] = {
{16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31},
{8,9,10,11,12,13,14,15,24,25,26,27,28,29,30,31},
{4,5,6,7,12,13,14,15,20,21,22,23,28,29,30,31},
{2,3,6,7,10,11,14,15,18,19,22,23,26,27,30,31},
{1,3,5,7,9,11,13,15,17,19,21,23,25,27,29,31}
};
int a[5][32] = { 0 };
int b[32] = { 0 };
int i, j, op[5], k=0;
//存在的数置1
for (i = 0; i < 5; i++)
{
for (j = 0; j < 16; j++)
{
a[i][nmb[i][j]] = 1;
}
}
while (1)
{
cin >> op[k];
if (op[k] != -1)
k++;
else
break;
}
//遍历所有输入行,累加出现次数
for (i = 0; i < k; i++)
{
int row = op[i]-1; //行号
for (j = 0; j < 32; j++)
{
if (a[row][j] == 1)
b[j] += 1;
}
}
int flag = 0;
for (i = 0; i < 32; i++)
{
if (b[i] >= k) //出现
{
flag = 1;
cout << "您看上的数字是" << i;
break;
}
}
if (flag == 0)
cout << "没有您看上的数字";
return 0;
}
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!