关于#c++#的问题:怎样才能把这个二维数组和二进制结合啊

img


怎样才能把这个二维数组和二进制结合啊,求指点目前感觉很迷茫,数组学的不够好

你的题目具体要求是什么啊?
这个显示都是16个数,
第一组是 16-31,数字依次递增1
第二组是 每8个数字一组,第二小组是再第一小组基础上+8
第三、四组是 每4个数字一组
第五组是等差数列
这题目的数字二进制也没看出什么特别的规律。。

img

你这个题目可以定义一个int a[5][32]的二维数组,并初始化为0,把每组出现的数字再a对应的行中设为1,根据输入的数字选择在所有组中都出现的数字。(这个数字不一定是唯一的,输入1、2、5、-1的时候,25 27 29 31都在3个组中都出现了,25只是第一个出现的数,可能是只输出1个)

img

代码:


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

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632