C++信息学奥赛1191:流感传染

news2024/9/28 13:27:23

在这里插入图片描述
一开始的代码自己运行测试代码怎么测试都是正确,但是一直提示答案错误

#include <iostream>
using namespace std;
int main()
{
    int n;
    cin >> n;
    char arr[n][n];
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < n; j++)
        {
            cin >> arr[i][j];
        }
    }
    int m;
    cin >> m;
    for (int k = 0; k < m - 1; k++)
    {
        for (int i = 0; i < n; i++)
        {
            for (int j = 0; j < n; j++)
            {
                if (arr[i][j] == '@')
                {
                    if (arr[i + 1][j] != '#' && i+1<n)
                        arr[i + 1][j] = '!';
                    if (arr[i - 1][j] != '#' && i-1>=0)
                        arr[i - 1][j] = '!';
                    if (arr[i][j + 1] != '#' && j+1<n)
                        arr[i][j + 1] = '!';
                    if (arr[i][j - 1] != '#' && j-1>=0)
                        arr[i][j - 1] = '!';
                }
            }
        }
        for (int i = 0; i < n; i++)
        {
            for (int j = 0; j < n; j++)
            {
                if (arr[i][j] == '!')
                {
                    arr[i][j] = '@';
                }
            }
        }

    }
    int nal = 0;
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < n; j++)
        {
            if (arr[i][j] == '@')
            {
                nal++;
            }
        }
    }
    cout << nal;
}

后面发现,代码存在一个错误。在每一天传播情况模拟中,你应该先更新新数组的状态,然后再将新数组赋值给原数组。这是因为在每一天传播情况模拟中,所有格点都应该同时更新状态,而不是根据之前的状态来更新。下面是正确代码与代码逻辑。

#include <iostream>
using namespace std;

int main()
{
    int n;
    cin >> n; // 输入字符矩阵的大小

    char arr[n][n]; // 声明字符矩阵
    
    // 读取字符矩阵
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < n; j++)
        {
            cin >> arr[i][j];
        }
    }

    int m;
    cin >> m; // 输入操作次数

    // 执行m-1次操作
    for (int k = 0; k < m - 1; k++)
    {   
        char new_arr[n][n]; // 用于存储更新后的字符矩阵

        // 更新字符矩阵
        for (int i = 0; i < n; i++)
        {
            for (int j = 0; j < n; j++)
            {
                if (arr[i][j] == '#')
                {
                    new_arr[i][j] = '#';
                }
                else if (arr[i][j] == '.')
                {
                    // 判断相邻位置是否有特定字符,并根据条件更新字符矩阵
                    if ((i > 0 && arr[i - 1][j] == '@') ||
                        (i < n - 1 && arr[i + 1][j] == '@') ||
                        (j > 0 && arr[i][j - 1] == '@') ||
                        (j < n - 1 && arr[i][j + 1] == '@'))
                    {
                        new_arr[i][j] = '@';
                    }
                    else
                    {
                        new_arr[i][j] = '.';
                    }
                }
                else if (arr[i][j] == '@')
                {
                    new_arr[i][j] = '@';
                }
            }
        }

        // 将更新后的字符矩阵复制给原始字符矩阵
        for (int i = 0; i < n; i++)
        {
            for (int j = 0; j < n; j++)
            {
                arr[i][j] = new_arr[i][j];
            }
        }
    }

    int nal = 0;
    
    // 统计特定字符在字符矩阵中的出现次数
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < n; j++)
        {
            if (arr[i][j] == '@')
            {
                nal++;
            }
        }
    }

    cout << nal; // 输出特定字符的出现次数

    return 0;
}

代码逻辑如下:

  1. 包含iostream头文件,以便使用输入输出流。
  2. 使用命名空间std,避免在代码中频繁使用std::。
  3. 主函数main开始。
  4. 输入一个整数n,表示字符矩阵的大小。
  5. 声明一个字符数组arr[n][n],用于存储字符矩阵。
  6. 使用两层嵌套循环,读取输入的字符矩阵。
  7. 输入一个整数m,表示操作次数。
  8. 使用循环执行m-1次操作:
    • 声明一个新的字符数组new_arr[n][n],用于存储更新后的字符矩阵。
    • 使用两层嵌套循环,遍历原始字符矩阵arr。
    • 根据特定规则更新字符矩阵元素,并将结果存储在新的字符数组new_arr中。
    • 将新的字符数组new_arr复制给原始字符矩阵arr。
  9. 声明一个变量nal,用于计算字符矩阵中的特定字符出现的次数。
  10. 使用两层嵌套循环,遍历字符矩阵arr,统计出现特定字符的次数,并赋值给变量nal。
  11. 输出变量nal的值。
  12. 返回0,表示程序正常结束。

这段代码的功能是根据输入的字符矩阵进行一定次数的操作,然后统计特定字符在最终字符矩阵中的出现次数。具体的操作规则需要根据题目要求来确定,上述代码中使用了一些条件判断和更新操作来模拟游戏过程。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/984790.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Netty—EventLoop

文章目录 一、EventLoopGroup 是什么&#xff1f;&#x1f914;️二、NioEventLoop 有哪些重要组成部分&#xff1f;&#x1f50d;三、NioEventLoop 的 thread 在何时启动&#xff1f;三、 run() 方法中线程在干嘛&#xff1f; 一、EventLoopGroup 是什么&#xff1f;&#x1f…

纯源码程序的执行

QT Creator本身是个IDE安装的时候根据自己需要配置的又有对应的编译器&#xff0c;因此编写普通的程序也不再话下。 选择Non-Qt Project工程&#xff0c;并在右侧根据自己的需要选择C应用还是C应用 新工程中工程管理文件和代码如下&#xff1a; 执行结果如下

驱动开发--day2

实现三盏灯的控制&#xff0c;编写应用程序测试 head.h #ifndef __HEAD_H__ #define __HEAD_H__#define LED1_MODER 0X50006000 #define LED1_ODR 0X50006014 #define LED1_RCC 0X50000A28#define LED2_MODER 0X50007000 #define LED2_ODR 0X50007014#endif mychrdev.c #inc…

浅谈数据治理中的智能数据目录

在数字化转型的战略实施中&#xff0c;很多企业都在搭建自己的业务、数据及人工智能的中台。在同这些企业合作和交流中&#xff0c;越来越体会到数据目录是中台建设的核心和基础。为了更好地提供数据服务&#xff0c;发挥数据价值&#xff0c;用户需要先理解数据和信任数据。 企…

c高级day2(9.7)shell脚本

作业: 写一个1.sh脚本&#xff0c;将以下内容放到脚本中&#xff1a; 在家目录下创建目录文件&#xff0c;dir 在dir下创建dir1和dir2 把当前目录下的所有文件拷贝到dir1中&#xff0c; 把当前目录下的所有脚本文件拷贝到dir2中 把dir2打包并压缩为dir2.tar.xz 再把dir2…

基于docker环境的tomcat开启远程调试

背景&#xff1a; Tomcat部署在docker环境中&#xff0c;使用rancher来进行管理&#xff0c;需要对其进行远程调试。 操作步骤&#xff1a; 1.将容器中的catalina.sh映射出来&#xff0c;便于对其修改&#xff0c;添加远程调试相关参数。 注意&#xff1a;/data/produce2201…

【计算机网络】HTTP(下)

本文承接上文的代码进行改造&#xff0c;上文链接&#xff1a;HTTP上 文章目录 1. 实现网站跳转实现 自己的网站跳转 2. 请求方法(get) && 响应方法(post)GET方法POST方法GET与POST的应用场景 3. HTTP状态码在自己设计的代码中发现4043开头的状态码(重定向状态码)永久…

“交叉轮”轮融资后,哪吒汽车能否脚踏“风火轮”续写逆袭故事?

2023年的新能源汽车江湖&#xff0c;烟波浩渺的水面下暗潮汹涌。 从特斯拉年初打响降价第一枪&#xff0c;降价潮至今未见尾声。9月刚至&#xff0c;小鹏汽车、零跑汽车又推出了调价政策。 这一背景下&#xff0c;车企内卷加剧是必然。年初&#xff0c;哪吒汽车联合创始人、C…

2019 ICPC香港站 G. Game Design

Problem - G - Codeforces 问题描述&#xff1a;怪物只能在树叶子节点出生&#xff0c;向上走&#xff0c;可以花费一个值在一个节点建防御塔&#xff0c;防御塔会阻碍怪物向上走。最小花费可以让根节点无法被怪物走到的一个造塔方法算是一个方案。现给定方案数&#xff0c;让…

MaskVO: Self-Supervised Visual Odometry with a Learnable Dynamic Mask 论文阅读

论文信息 题目&#xff1a;MaskVO: Self-Supervised Visual Odometry with a Learnable Dynamic Mask 作者&#xff1a;Weihao Xuan, Ruijie Ren, Siyuan Wu, Changhao Chen 时间&#xff1a;2022 来源&#xff1a; IEEE/SICE International Symposium on System Integration …

Kubernetes(k8s)部署高可用多主多从的Redis集群

Kubernetes部署高可用多主多从的Redis集群 环境准备准备Kubernetes准备存储类 部署redis准备一个命名空间命令创建yaml文件创建&#xff08;推荐&#xff09; 准备redis配置文件准备部署statefulset的资源清单文件执行文件完成部署初始化集群 环境准备 准备Kubernetes 首先你…

【Go基础】编译、变量、常量、基本数据类型、字符串

面试题文档下链接点击这里免积分下载 go语言入门到精通点击这里免积分下载 编译 使用 go build 1.在项目目录下执行 2.在其他路径下编译 go build &#xff0c;需要再后面加上项目的路径&#xff08;项目路径从GOPATH/src后开始写起&#xff0c;编译之后的可执行文件就保存再…

chrome_elf.dll丢失怎么办?修复chrome_elf.dll文件的方法

Chrome是目前最受欢迎的网络浏览器之一&#xff0c;然而有时用户可能会遇到Chrome_elf.dll丢失的问题。该DLL文件是Chrome浏览器的一个重要组成部分&#xff0c;负责启动和管理程序的各种功能。当Chrome_elf.dll丢失时&#xff0c;用户可能无法正常启动Chrome或执行某些功能。本…

log4qt库的使用

log4qt库的使用 一,什么是log4qt?二,log4qt的下载三,如何集成log4qt?1.在vs2022中集成log4qt的方法:模块一:配置log4qt的步骤步骤一,将下好的log4qt库进行解压,然后再库文件中,新建build和Log4Qt文件夹步骤二,打开cmake,有两个填写路径的位置.步骤三,点击cmake的configure按钮…

(2023,Diffusion)稳定扩散模型是不稳定的

Stable Diffusion is Unstable 公众号&#xff1a;EDPJ&#xff08;添加 VX&#xff1a;CV_EDPJ 进交流群获取资料&#xff09; 0. 摘要 最近&#xff0c;文本到图像模型一直蓬勃发展。 尽管它们具有强大的生成能力&#xff0c;但我们的研究发现这一生成过程缺乏稳健性。 具体…

【C++】平衡二叉搜索树的模拟实现

&#x1f307;个人主页&#xff1a;平凡的小苏 &#x1f4da;学习格言&#xff1a;命运给你一个低的起点&#xff0c;是想看你精彩的翻盘&#xff0c;而不是让你自甘堕落&#xff0c;脚下的路虽然难走&#xff0c;但我还能走&#xff0c;比起向阳而生&#xff0c;我更想尝试逆风…

【数据结构】设计环形队列

环形队列是一种线性数据结构&#xff0c;其操作表现基于 FIFO&#xff08;先进先出&#xff09;原则并且队尾被连接在队首之后以形成一个循环。它也被称为“环形缓冲器”。 环形队列的一个好处是我们可以利用这个队列之前用过的空间。在一个普通队列里&#xff0c;一旦一个队列…

使用Caffeine实现帖子的缓存来优化网站的运行速度

导入依赖 <!-- https://mvnrepository.com/artifact/com.github.ben-manes.caffeine/caffeine --><dependency><groupId>com.github.ben-manes.caffeine</groupId><artifactId>caffeine</artifactId><version>3.1.7</version>…

【产品应用】一体化伺服电机在全自动咖啡研磨机中的应用

在现代社会中&#xff0c;咖啡已经成为人们生活中不可或缺的一部分。为了满足咖啡爱好者对于口感和品质的追求&#xff0c;全自动咖啡研磨机应运而生。 而其中的一体化伺服电机作为关键组件&#xff0c;发挥着重要的作用。本文将探讨一体化伺服电机在全自动咖啡研磨机中的应用&…