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

2023-10-17 13:40

本文主要是介绍C++信息学奥赛1191:流感传染,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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

#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,表示程序正常结束。

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

这篇关于C++信息学奥赛1191:流感传染的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/225763

相关文章

利用c++判断水仙花数并输出示例代码

《利用c++判断水仙花数并输出示例代码》水仙花数是指一个三位数,其各位数字的立方和恰好等于该数本身,:本文主要介绍利用c++判断水仙花数并输出的相关资料,文中通过代码介绍的非常详细,需要的朋友可以... 以下是使用C++实现的相同逻辑代码:#include <IOStream>#include <vec

基于C++的UDP网络通信系统设计与实现详解

《基于C++的UDP网络通信系统设计与实现详解》在网络编程领域,UDP作为一种无连接的传输层协议,以其高效、低延迟的特性在实时性要求高的应用场景中占据重要地位,下面我们就来看看如何从零开始构建一个完整... 目录前言一、UDP服务器UdpServer.hpp1.1 基本框架设计1.2 初始化函数Init详解

C++ 右值引用(rvalue references)与移动语义(move semantics)深度解析

《C++右值引用(rvaluereferences)与移动语义(movesemantics)深度解析》文章主要介绍了C++右值引用和移动语义的设计动机、基本概念、实现方式以及在实际编程中的应用,... 目录一、右值引用(rvalue references)与移动语义(move semantics)设计动机1

C++ move 的作用详解及陷阱最佳实践

《C++move的作用详解及陷阱最佳实践》文章详细介绍了C++中的`std::move`函数的作用,包括为什么需要它、它的本质、典型使用场景、以及一些常见陷阱和最佳实践,感兴趣的朋友跟随小编一起看... 目录C++ move 的作用详解一、一句话总结二、为什么需要 move?C++98/03 的痛点⚡C++

详解C++ 存储二进制数据容器的几种方法

《详解C++存储二进制数据容器的几种方法》本文主要介绍了详解C++存储二进制数据容器,包括std::vector、std::array、std::string、std::bitset和std::ve... 目录1.std::vector<uint8_t>(最常用)特点:适用场景:示例:2.std::arra

C++构造函数中explicit详解

《C++构造函数中explicit详解》explicit关键字用于修饰单参数构造函数或可以看作单参数的构造函数,阻止编译器进行隐式类型转换或拷贝初始化,本文就来介绍explicit的使用,感兴趣的可以... 目录1. 什么是explicit2. 隐式转换的问题3.explicit的使用示例基本用法多参数构造

C++,C#,Rust,Go,Java,Python,JavaScript的性能对比全面讲解

《C++,C#,Rust,Go,Java,Python,JavaScript的性能对比全面讲解》:本文主要介绍C++,C#,Rust,Go,Java,Python,JavaScript性能对比全面... 目录编程语言性能对比、核心优势与最佳使用场景性能对比表格C++C#RustGoJavapythonjav

C++打印 vector的几种方法小结

《C++打印vector的几种方法小结》本文介绍了C++中遍历vector的几种方法,包括使用迭代器、auto关键字、typedef、计数器以及C++11引入的范围基础循环,具有一定的参考价值,感兴... 目录1. 使用迭代器2. 使用 auto (C++11) / typedef / type alias

C++ scoped_ptr 和 unique_ptr对比分析

《C++scoped_ptr和unique_ptr对比分析》本文介绍了C++中的`scoped_ptr`和`unique_ptr`,详细比较了它们的特性、使用场景以及现代C++推荐的使用`uni... 目录1. scoped_ptr基本特性主要特点2. unique_ptr基本用法3. 主要区别对比4. u

C++11中的包装器实战案例

《C++11中的包装器实战案例》本文给大家介绍C++11中的包装器实战案例,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录引言1.std::function1.1.什么是std::function1.2.核心用法1.2.1.包装普通函数1.2.