【问题标题】:2D Rectangular grid二维矩形网格
【发布时间】:2019-12-25 03:11:13
【问题描述】:

我尝试在https://nus.kattis.com/problems/apples 解决以下问题,但我的代码没有通过测试用例。我是 C 的新手,我不确定我哪里出错了。我的代码如下:

#include <stdio.h>

int main(){

    int r,c;
    scanf("%d",&r);
    scanf("%d",&c);
    char arr[r][c];
    for (int i=0; i<r;i++){
        for(int j=0;j<c;j++){
            if(arr[i][j]=='a' && arr[i+1][j]=='.'){
                arr[i][j] = '.';
                arr[i+1][j] = 'a';
            }
        }
    }
    for(int i=0;i<r;i++){
        for(int j=0;j<c;j++){
            printf("%c",arr[i][j]);
        }
    }
}

如果我不得不猜测,我会检查 arr[i][j] 是否等于 'a',因为 arr[i][j] 处的 'a' 与 a 的地址不同通用“a”。

【问题讨论】:

  • 您没有任何代码可以读取初始苹果位置;您只运行一次重力规则迭代;而且您无法处理# 障碍。

标签: c arrays pointers multidimensional-array


【解决方案1】:

您的代码未正确读取输入(网格的内容)。在检查条件和执行更多任务之前,您必须使用 scanf 或其他输入函数读取标准输入。

虽然,如果您声明r * c char 数组的大小,将输入推送给它们并运行代码,它将检查arr[i+1][j]=='.' 部分的rth 索引。你应该通过声明数组稍大或修改你的逻辑来避免这种情况。

【讨论】:

    【解决方案2】:

    正如所指出的,您缺少初始网格读取代码。 由于它不能直接帮助你解决问题,阅读网格的代码可以帮助你前进。

    因为它是一个二维网格,所以有two way of storing the data:

    • 主要行(您所做的方式,也是组织数据的自然方式),其中数据存储在行数组中
    • 主要列,数据存储在列数组中

    对于这个问题,以列主要格式存储数据会更有利。但为了完整起见,我将为您提供两种存储方式

    // Row major
    char arr[r][c];
    int count = 0;
    int ch;
    while (EOF != (ch = fgetc(fp))) {
        if(ch!='a' && ch != '#' && ch != '.') continue;
        row = count / c;
        col = count % c;
        arr[row][col] = ch;
    }
    
    // Col major
    char arr[c][r];
    int count = 0;
    int ch;
    while (EOF != (ch = fgetc(fp))) {
        if(ch!='a' && ch != '#' && ch != '.') continue;
        row = count / c;
        col = count % c;
        arr[col][row] = ch;
    }
    

    我推荐你列主存储的原因是,如果你单独处理每一列,问题会更好地解决。

    【讨论】:

      猜你喜欢
      • 2011-08-14
      • 2017-06-11
      • 1970-01-01
      • 2012-07-04
      • 1970-01-01
      • 2012-01-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多