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

演示及说明:

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

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

题目原截图:

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

相关文章
|
29天前
|
机器学习/深度学习 人工智能 API
如何在c++侧编译运行一个aclnn(AOL)算子?
CANN的AOL库提供了一系列高性能算子API,优化了昇腾AI处理器的调用流程。通过两段式接口设计,开发者可以高效地调用算子库API,实现模型创新与应用,提升开发效率和模型性能。示例中展示了如何使用`aclnnAdd`算子,包括环境初始化、算子调用及结果处理等步骤。
|
4月前
|
C++
【C++案例】一个项目掌握C++基础-通讯录管理系统
这篇文章通过一个通讯录管理系统的C++项目案例,详细介绍了如何使用C++实现添加、显示、删除、查找、修改和清空联系人等功能。
58 3
|
3月前
|
存储 编译器 C语言
深入计算机语言之C++:类与对象(上)
深入计算机语言之C++:类与对象(上)
|
3月前
|
存储 分布式计算 编译器
深入计算机语言之C++:C到C++的过度-2
深入计算机语言之C++:C到C++的过度-2
|
3月前
|
编译器 Linux C语言
深入计算机语言之C++:C到C++的过度-1
深入计算机语言之C++:C到C++的过度-1
|
4月前
|
算法 数据安全/隐私保护 C++
超级好用的C++实用库之MD5信息摘要算法
超级好用的C++实用库之MD5信息摘要算法
105 0
|
5月前
|
Rust 安全 C++
系统编程的未来之战:Rust能否撼动C++的王座?
【8月更文挑战第31天】Rust与C++:现代系统编程的新选择。C++长期主导系统编程,但内存安全问题频发。Rust以安全性为核心,通过所有权和生命周期概念避免内存泄漏和野指针等问题。Rust在编译时确保内存安全,简化并发编程,其生态系统虽不及C++成熟,但发展迅速,为现代系统编程提供了新选择。未来有望看到更多Rust驱动的系统级应用。
75 1
|
5月前
|
存储 数据可视化 C++
【C++】C++-学生考试题库管理系统(源码)
本系统设计了一个选题管理流程,包括读取题目信息、随机抽取题目、保存及查询选题结果等功能。使用 `readProjects` 从文件读取题目信息,`drawProject` 随机抽取未选中的题目,`saveSelection` 保存选题结果至文件,`querySelection` 查询并显示所有选题结果。主函数提供菜单界面,支持学生信息输入、抽题及结果查询。关注【测试开发自动化】公众号,回复“题库”获取源码。
42 0
|
5月前
|
C++
使用 QML 类型系统注册 C++ 类型
使用 QML 类型系统注册 C++ 类型
112 0
|
2月前
|
存储 编译器 C语言
【c++丨STL】string类的使用
本文介绍了C++中`string`类的基本概念及其主要接口。`string`类在C++标准库中扮演着重要角色,它提供了比C语言中字符串处理函数更丰富、安全和便捷的功能。文章详细讲解了`string`类的构造函数、赋值运算符、容量管理接口、元素访问及遍历方法、字符串修改操作、字符串运算接口、常量成员和非成员函数等内容。通过实例演示了如何使用这些接口进行字符串的创建、修改、查找和比较等操作,帮助读者更好地理解和掌握`string`类的应用。
61 2