鱼C论坛

 找回密码
 立即注册
查看: 631|回复: 3

哪里没有考虑周全?

[复制链接]
发表于 2023-12-1 11:35:38 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
QQ截图20231201113226.png

QQ截图20231201113300.png

代码:

  1. #include <stdio.h>

  2. int main()
  3. {
  4.     int bi,bj,n,m;
  5.     scanf("%d %d %d %d",&bi,&bj,&n,&m);
  6.     int chessboard[30][30] = {0};
  7.    
  8.     for (int i=0;i<=bi;i++){
  9.         for (int j=0;j<=bj;j++){
  10.             chessboard[i][j] = 1;
  11.         }
  12.     }
  13.     chessboard[n][m] = 0;
  14.     if (n-1>=0 && m+2<=bj)chessboard[n-1][m+2]=0;
  15.     if (n+1<=bi && m+2<=bj)chessboard[n+1][m+2]=0;
  16.     if (n-1>=0 && m-2>=0)chessboard[n-1][m-2]=0;
  17.     if (n+1<=bi && m-2>=0)chessboard[n+1][m-2]=0;
  18.     if (n+2<=bi && m+1<=bj)chessboard[n+2][m+1]=0;
  19.     if (n+2<=bi && m-1>=0)chessboard[n+2][m-1]=0;
  20.     if (n-2>=0 && m-1>=0)chessboard[n-2][m-1]=0;
  21.     if (n-2>=0 && m+1<=bj)chessboard[n-2][m+1]=0;
  22.     for (int i=0;i<=bi;i++){
  23.         for (int j=0;j<=bj;j++){
  24.             if (0==i && 0==j){continue;}
  25.             if (chessboard[i][j]==0){
  26.                 continue;
  27.             }
  28.             if (i==0){
  29.                 chessboard[i][j] = chessboard[i][j-1];
  30.             }
  31.             else if (j==0){
  32.                 chessboard[i][j] = chessboard[i-1][j];
  33.             }
  34.             else{
  35.                 chessboard[i][j] = chessboard[i][j-1]+chessboard[i-1][j];
  36.             }
  37.         }
  38.     }
  39.     printf("%d",chessboard[bi][bj]);
  40.    
  41.     return 0;
  42. }
复制代码



想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-12-1 11:35:54 | 显示全部楼层
在你的代码中,有一些需要注意的地方:
1. 在声明数组chessboard时,需要指定数组的大小。例如,如果棋盘是一个n行m列的矩阵,那么你可以使用`int chessboard[n][m]`来声明一个二维数组。
2. 在for循环中,你需要将i的范围从0到n进行遍历,并在内部添加一个嵌套的循环来遍历列。例如,你可以使用两个for循环来遍历每个位置,如下所示:
  1. for (int i=0; i<n; i++) {
  2.     for (int j=0; j<m; j++) {
  3.         // 在这里处理每个位置的逻辑
  4.     }
  5. }
复制代码

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

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

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

点评

你好像不能看图片?  发表于 2023-12-1 11:37
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-12-1 13:17:09 | 显示全部楼层
你的代码思路正确,不过需要一个注意的地方。

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

以下是修正后的代码:

  1. #include <stdio.h>

  2. int main()
  3. {
  4.     int bi,bj,n,m;
  5.     scanf("%d %d %d %d",&bi,&bj,&n,&m);
  6.     long long chessboard[30][30] = {0};
  7.    
  8.     for (int i=0;i<=bi;i++){
  9.         for (int j=0;j<=bj;j++){
  10.             chessboard[i][j] = 1;
  11.         }
  12.     }
  13.     chessboard[n][m] = 0;
  14.     if (n-1>=0 && m+2<=bj)chessboard[n-1][m+2]=0;
  15.     if (n+1<=bi && m+2<=bj)chessboard[n+1][m+2]=0;
  16.     if (n-1>=0 && m-2>=0)chessboard[n-1][m-2]=0;
  17.     if (n+1<=bi && m-2>=0)chessboard[n+1][m-2]=0;
  18.     if (n+2<=bi && m+1<=bj)chessboard[n+2][m+1]=0;
  19.     if (n+2<=bi && m-1>=0)chessboard[n+2][m-1]=0;
  20.     if (n-2>=0 && m-1>=0)chessboard[n-2][m-1]=0;
  21.     if (n-2>=0 && m+1<=bj)chessboard[n-2][m+1]=0;
  22.     for (int i=0;i<=bi;i++){
  23.         for (int j=0;j<=bj;j++){
  24.             if (0==i && 0==j){continue;}
  25.             if (chessboard[i][j]==0){
  26.                 continue;
  27.             }
  28.             if (i==0){
  29.                 chessboard[i][j] = chessboard[i][j-1];
  30.             }
  31.             else if (j==0){
  32.                 chessboard[i][j] = chessboard[i-1][j];
  33.             }
  34.             else{
  35.                 chessboard[i][j] = chessboard[i][j-1]+chessboard[i-1][j];
  36.             }
  37.         }
  38.     }
  39.     printf("%lld",chessboard[bi][bj]);
  40.    
  41.     return 0;
  42. }
复制代码


在 OI (信息学竞赛)中,要使用合理的类型来存储结果和变量,超过了变量支持的最大数值则会引发溢出,从而得到错误的结果。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-1 01:06

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表