【2021全国高校计算机能力挑战赛C++题目】17.信息整理 某机房上线了一套系统,和每台计算机都相连,以便监控各计算机相关外设的运行状态。

简介: 【2021全国高校计算机能力挑战赛C++题目】17.信息整理 某机房上线了一套系统,和每台计算机都相连,以便监控各计算机相关外设的运行状态。

17.信息整理

某机房上线了一套系统,和每台计算机都相连,以便监控各计算机相关外设的运行状态。各计算机的返回信号映射为一个0-15的数,其中从左到右第0位为1表示键盘故障、第1位为1表示鼠标故障、第2位为1表示显示故障、第3位为1表示声音故障。

如7对应0111,表示鼠标、显示、声音同时故障。

先输入这N台计算机的状态,请统计键盘或者鼠标故障的计算机数量。

输入说明:

第一行是一个N (0<N≤1000) ,表示计算机的数量。接下来N行,每行是一 个0-15的数字。

输出说明:

一个整数,示机房里键盘或者鼠标故障的计算机数目。

输入样例: .

5

12

0

0

2

4

输出样例:

2

代码(仅供参考):

方法一:
#include <iostream>
using namespace std;
int main()
{
    int N;
    cin >> N;
    int num[N];
    for (int i = 0; i < N; i++)
    {
        cin >> num[i];
    }
    int count = 0; //用于统计转换之后的二进制中第一位或者第二位为1的个数
    for (int i = 0; i < N; i++)
    {
        int a[4] = {2, 2, 2, 2}; //初始时,二进制的4位都标记为2
        int j = 0, flag = num[i];
        //十进制转换为二进制
        while (flag)
        {
            a[j] = flag % 2;
            flag /= 2;
            j++;
        }
        //转换之后并不是4位,例如:4转换之后是10,而不是0010(其中数组a中是“2210”);所以进行下面步骤使其变为4位
        for (flag = 3; flag >= 0; flag--)
        {
            if (a[flag] == 2) //将初始未做转换的位置变为0
            {
                a[flag] = 0;
            }
            // cout << a[flag]; //输出转换之后的结果(第一位或者第二位若为1,后面的几位不输出)
            if (flag == 3 || flag == 2)
            {
                if (a[flag] == 1)
                {
                    count++;
                    break; //第一位判定为1之后,(结束循环),就不去判断第二位;
                }
            }
        }
        // cout << endl;
    }
    cout << count;
    return 0;
}
方法二:
#include <iostream>
#include <bitset>
using namespace std;
int main()
{
    int N;
    cin >> N;
    int num[N];
    for (int i = 0; i < N; i++)
    {
        cin >> num[i];
    }
    int count = 0; //用于统计
    for (int i = 0; i < N; i++)
    {
        bitset<4> temp(num[i]); //长度为4,默认以0填充
        // cout << temp << endl;
        if (temp[2] == 1 || temp[3] == 1)
        {
            count++;
        }
    }
    cout << count << endl;
    return 0;
}

演示及说明:

(上图说明是针对于方法一的)

(上图说明是针对于方法一的)

题目原截图:

如果代码中有错误或者考虑不周的情况,欢迎指正~

相关文章
|
25天前
|
存储 JSON 数据库
【C++ 软件设计思路】跨平台应用开发:如何选择合适的格式保存信息
【C++ 软件设计思路】跨平台应用开发:如何选择合适的格式保存信息
89 0
|
1月前
|
Linux 数据处理 C++
Linux系统编程 C/C++ 以及Qt 中的零拷贝技术: 从底层原理到高级应用(一)
Linux系统编程 C/C++ 以及Qt 中的零拷贝技术: 从底层原理到高级应用
69 0
|
1月前
|
存储 Linux 测试技术
无效数据处理之道:Linux系统编程C/C++实践探索(三)
无效数据处理之道:Linux系统编程C/C++实践探索
17 0
|
19天前
|
人工智能 机器人 编译器
【C++】Windows端VS code中运行CMake工程(手把手教学)
【C++】Windows端VS code中运行CMake工程(手把手教学)
|
1月前
|
存储 Linux API
Linux系统编程 C/C++ 以及Qt 中的零拷贝技术: 从底层原理到高级应用(三)
Linux系统编程 C/C++ 以及Qt 中的零拷贝技术: 从底层原理到高级应用
31 1
|
1月前
|
消息中间件 Linux 数据处理
Linux系统编程 C/C++ 以及Qt 中的零拷贝技术: 从底层原理到高级应用(二)
Linux系统编程 C/C++ 以及Qt 中的零拷贝技术: 从底层原理到高级应用
30 1
|
10天前
|
存储 算法 Linux
【实战项目】网络编程:在Linux环境下基于opencv和socket的人脸识别系统--C++实现
【实战项目】网络编程:在Linux环境下基于opencv和socket的人脸识别系统--C++实现
29 6
|
26天前
|
Linux 编译器 程序员
【Linux 调试秘籍】深入探索 C++:运行时获取堆栈信息和源代码行数的终极指南
【Linux 调试秘籍】深入探索 C++:运行时获取堆栈信息和源代码行数的终极指南
67 0
|
3天前
|
C++
面向对象的C++题目以及解法2
面向对象的C++题目以及解法2
11 1
|
26天前
|
存储 监控 Linux
Linux 使用getrusage系统调用获取cpu信息:一个C++实例分析
Linux 使用getrusage系统调用获取cpu信息:一个C++实例分析
48 0