求助!!!

P3397 地毯

sy514 @ 2024-08-05 09:41:10

#include<iostream>
using namespace std;
int a[1010][1010];
int main()
{
    int n,m;
    cin>>n>>m;
    for(int i=1;i<=m;i++)
    {
        int x1,x2,y1,y2;
        cin>>x1>>y1>>x2>>y2;
        for(int j=x1;j<=x2;j++)
            for(int k=y1;k<=y2;k++)
                a[j][k]++;

    }
    for(int i=1;i<=n;i++)
        for(int j=1;j<=n;j++)
        {
            printf("%d",a[i][j]);
            if(j==n)
                printf("\n");
        }
    return 0;
}

by FFFuuuFFFuuu @ 2024-08-05 09:49:38

要修正代码,需要注意以下几点:

  1. 输入坐标的范围:题目中坐标是从1开始的,这意味着在使用数组索引时需要注意坐标的转换。
  2. 数组的初始化:我们需要确保数组在开始计算前是干净的,应该将其全部初始化为0。
  3. 输出格式:最后的输出需要在每行的最后一个数字后换行,而不是在每个数字后都有换行。

以下是修正后的代码:

#include<iostream>
using namespace std;

int a[1010][1010];

int main() {
    int n, m;
    cin >> n >> m;

    // 初始化覆盖计数数组为0
    for(int i = 0; i <= n; ++i)
        for(int j = 0; j <= n; ++j)
            a[i][j] = 0;

    // 处理每个地毯
    for(int i = 0; i < m; i++) {
        int x1, y1, x2, y2;
        cin >> x1 >> y1 >> x2 >> y2;
        for(int j = x1; j <= x2; j++) {
            for(int k = y1; k <= y2; k++) {
                a[j][k]++;
            }
        }
    }

    // 输出结果
    for(int i = 1; i <= n; i++) {
        for(int j = 1; j <= n; j++) {
            cout << a[i][j];
            if (j < n)
                cout << " ";
        }
        cout << endl;
    }

    return 0;
}

代码说明

  1. 初始化:使用双重循环将数组a初始化为0,确保所有位置开始时没有地毯覆盖。
  2. 输入地毯信息:对于每个地毯,我们通过读取其左上角和右下角的坐标,并使用嵌套循环更新对应区域的覆盖计数。
  3. 输出结果:输出二维数组的内容,每行最后一个数字后不加空格。

注意事项


by sshhgggddsbf @ 2024-08-23 13:04:45

你的每一个字符的输出后面没有空格

这样:

#include<iostream>
using namespace std;
int a[1010][1010];
int main()
{
    int n,m;
    cin>>n>>m;
    for(int i=1;i<=m;i++)
    {
        int x1,x2,y1,y2;
        cin>>x1>>y1>>x2>>y2;
        for(int j=x1;j<=x2;j++)
            for(int k=y1;k<=y2;k++)
                a[j][k]++;

    }
    for(int i=1;i<=n;i++)
        for(int j=1;j<=n;j++)
        {
            printf("%d ",a[i][j]);//加空格
            if(j==n)
                printf("\n");
        }
    return 0;
}

|