yinda_peng 发表于 2023-12-1 11:35:38

哪里没有考虑周全?



代码:
#include <stdio.h>

int main()
{
    int bi,bj,n,m;
    scanf("%d %d %d %d",&bi,&bj,&n,&m);
    int chessboard = {0};
   
    for (int i=0;i<=bi;i++){
      for (int j=0;j<=bj;j++){
            chessboard = 1;
      }
    }
    chessboard = 0;
    if (n-1>=0 && m+2<=bj)chessboard=0;
    if (n+1<=bi && m+2<=bj)chessboard=0;
    if (n-1>=0 && m-2>=0)chessboard=0;
    if (n+1<=bi && m-2>=0)chessboard=0;
    if (n+2<=bi && m+1<=bj)chessboard=0;
    if (n+2<=bi && m-1>=0)chessboard=0;
    if (n-2>=0 && m-1>=0)chessboard=0;
    if (n-2>=0 && m+1<=bj)chessboard=0;
    for (int i=0;i<=bi;i++){
      for (int j=0;j<=bj;j++){
            if (0==i && 0==j){continue;}
            if (chessboard==0){
                continue;
            }
            if (i==0){
                chessboard = chessboard;
            }
            else if (j==0){
                chessboard = chessboard;
            }
            else{
                chessboard = chessboard+chessboard;
            }
      }
    }
    printf("%d",chessboard);
   
    return 0;
}


FishC_GPT 发表于 2023-12-1 11:35:54

在你的代码中,有一些需要注意的地方:
1. 在声明数组chessboard时,需要指定数组的大小。例如,如果棋盘是一个n行m列的矩阵,那么你可以使用`int chessboard`来声明一个二维数组。
2. 在for循环中,你需要将i的范围从0到n进行遍历,并在内部添加一个嵌套的循环来遍历列。例如,你可以使用两个for循环来遍历每个位置,如下所示:

for (int i=0; i<n; i++) {
    for (int j=0; j<m; j++) {
      // 在这里处理每个位置的逻辑
    }
}

3. 在处理每个位置的逻辑时,你需要根据题目要求对每个位置进行操作。但是,在你提供的代码中,没有涉及到任何关于棋盘上每个位置的具体处理逻辑。因此,你需要明确问题的要求并相应地处理每个位置。

请提供更多关于问题的具体信息以及对每个位置的处理逻辑,以便我能够为你提供更详细的帮助和代码示例。

以上回复来自 -- ChatGPT(FishC官方接口),如未能正确解答您的问题,请继续追问。

zhangjinxuan 发表于 2023-12-1 13:17:09

你的代码思路正确,不过需要一个注意的地方。

对于此题而言,路径条数可能会达到 O(C(N+M,N)),这个数量是巨大的,其数值已经远远超过了 int 的最大存储范围。所以,你应该使用更大的整数类型来表示答案,例如 C99 中添加的超长 (long long) 类型。

以下是修正后的代码:

#include <stdio.h>

int main()
{
    int bi,bj,n,m;
    scanf("%d %d %d %d",&bi,&bj,&n,&m);
    long long chessboard = {0};
   
    for (int i=0;i<=bi;i++){
      for (int j=0;j<=bj;j++){
            chessboard = 1;
      }
    }
    chessboard = 0;
    if (n-1>=0 && m+2<=bj)chessboard=0;
    if (n+1<=bi && m+2<=bj)chessboard=0;
    if (n-1>=0 && m-2>=0)chessboard=0;
    if (n+1<=bi && m-2>=0)chessboard=0;
    if (n+2<=bi && m+1<=bj)chessboard=0;
    if (n+2<=bi && m-1>=0)chessboard=0;
    if (n-2>=0 && m-1>=0)chessboard=0;
    if (n-2>=0 && m+1<=bj)chessboard=0;
    for (int i=0;i<=bi;i++){
      for (int j=0;j<=bj;j++){
            if (0==i && 0==j){continue;}
            if (chessboard==0){
                continue;
            }
            if (i==0){
                chessboard = chessboard;
            }
            else if (j==0){
                chessboard = chessboard;
            }
            else{
                chessboard = chessboard+chessboard;
            }
      }
    }
    printf("%lld",chessboard);
   
    return 0;
}

在 OI (信息学竞赛)中,要使用合理的类型来存储结果和变量,超过了变量支持的最大数值则会引发溢出,从而得到错误的结果。
页: [1]
查看完整版本: 哪里没有考虑周全?