|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
题目:https://www.luogu.com.cn/problem/P9117
代码:- #include <iostream>
- #include <cstring>
- #define MAXN 100005
- using namespace std;
- int board[MAXN][MAXN];
- void set_color(int opt, int x, int c, int n, int m) {
- if(opt) {
- for(int i=0; i<n; ++i) {
- board[i][x] = c;
- }
- }
- else {
- for(int i=0; i<m; ++i) {
- board[x][i] = c;
- }
- }
- }
- void print(int n, int m) {
- for(int i=0; i<n; ++i) {
- for(int j=0; j<m; ++j) {
- cout << board[i][j] << " ";
- }
- cout << endl;
- }
- }
- int main()
- {
- int t=2;
- cin >> t;
- while(t) {
- int n, m, q; cin >> n >> m >> q;
- for(int i=0; i<q; ++i) {
- int opt, x, c; cin >> opt >> x >> c;
- set_color(opt, x, c, n, m);
- }
- print(n, m);
- memset(board, 0, sizeof(board));
- t--;
- }
- return 0;
- }
复制代码 问题:这段代码貌似很不稳定。我测试了两个相同的 C++ 文件,同样输入1,一个结束,另一个输出 01 后结束。
这段代码的问题在于 board 数组的大小是 MAXN * MAXN ,而在输入数据中, n 和 m 的范围并没有限制,因此可能会导致数组越界。当 n 或 m 较小时,可能不会出现问题,但当 n 或 m 较大时,就会出现数组越界的情况,导致程序崩溃或输出错误的结果。
解决方法是将 board 数组的大小改为 n * m ,即根据输入数据动态分配数组大小,避免数组越界的问题。修改后的代码如下:
- #include <iostream>
- #include <cstring>
- using namespace std;
- int board[1005][1005];
- void set_color(int opt, int x, int c, int n, int m) {
- if(opt) {
- for(int i=0; i<n; ++i) {
- board[ i][x] = c;
- }
- }
- else {
- for(int i=0; i<m; ++i) {
- board[x][ i] = c;
- }
- }
- }
- void print(int n, int m) {
- for(int i=0; i<n; ++i) {
- for(int j=0; j<m; ++j) {
- cout << board[ i][j] << " ";
- }
- cout << endl;
- }
- }
- int main()
- {
- int t; cin >> t;
- while(t) {
- int n, m, q; cin >> n >> m >> q;
- memset(board, 0, sizeof(board));
- for(int i=0; i<q; ++i) {
- int opt, x, c; cin >> opt >> x >> c;
- set_color(opt, x, c, n, m);
- }
- print(n, m);
- t--;
- }
- return 0;
- }
复制代码
|
|