鱼C论坛

 找回密码
 立即注册
查看: 1499|回复: 2

[已解决]牛客:热杆上的蚂蚁

[复制链接]
发表于 2023-10-1 23:30:28 | 显示全部楼层 |阅读模式

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

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

x
题目:https://ac.nowcoder.com/acm/contest/19305/1036
#include<stdio.h>
int main()
{
    int m,n,c=0;
    scanf("%d %d",&m,&n);
    int a[n], b[n],min[n];
    for(int i=0;i<n;i++)
    {
        scanf("%d",&a[i]);
        b[i]=m-a[i];
        if(a[i]>b[i])
        {
            min[i]=b[i];
        }
        
        
    }
    for(int j=0;j<n;j++)
    {
        if(min[j]>c)
        {
            c=min[j];
        }
    }
    printf("%d",c);
    return 0;
   
   
}
只能通过40%,剩下的应该怎么改
最佳答案
2023-10-1 23:33:41
根据您提供的代码,我注意到其中存在几个问题导致无法通过全部测试用例。

首先,关于输入部分,请注意在循环中读取数组a时应该使用下标i,而不是只写&a。修正后的代码如下:

  1. scanf("%d", &a[ i]);
复制代码


接下来,在第一个循环中,您计算的b表示蚂蚁离热杆的距离,但是在赋值给min数组时,错误地把b赋给了min。应该将两者的位置互换,修正后的代码如下:

  1. if (a > b) {
  2.     min[ i] = b;
  3. } else {
  4.     min[ i] = a;
  5. }
复制代码


最后,求解最小距离的过程也存在问题。目前的代码逻辑是遍历min数组,找到最大的距离并赋给c。但是因为初始状态下c的值为0,所以无法正确找到最大值。可以通过将c的初始值设置为第一个元素的值来解决这个问题。修正后的代码如下:

  1. c = min[0];
  2. for (int j = 1; j < n; j++) {
  3.     if (min[j] > c) {
  4.         c = min[j];
  5.     }
  6. }
复制代码


综上所述,修正后的代码如下:

  1. #include <stdio.h>

  2. int main() {
  3.     int m, n, c = 0;
  4.     scanf("%d %d", &m, &n);
  5.     int a[n], b[n], min[n];

  6.     for (int i = 0; i < n; i++) {
  7.         scanf("%d", &a[ i]);
  8.         b[ i] = m - a[ i];
  9.         if (a[ i] > b[ i]) {
  10.             min[ i] = b[ i];
  11.         } else {
  12.             min[ i] = a[ i];
  13.         }
  14.     }

  15.     c = min[0];
  16.     for (int j = 1; j < n; j++) {
  17.         if (min[j] > c) {
  18.             c = min[j];
  19.         }
  20.     }

  21.     printf("%d", c);
  22.     return 0;
  23. }
复制代码


希望这次的修改能够帮助您通过更多的测试用例。如果还有其他问题,请随时提问。
如果问题已经解决,请设置最佳答案
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-10-1 23:30:47 | 显示全部楼层
这道题是一道模拟题,需要模拟蚂蚁的运动过程,然后求出最长时间。代码中存在以下问题:

1. 在输入 a 数组时,应该是  scanf("%d",&a[ i]);  而不是  scanf("%d",&a); ,否则只会输入第一个数。

2. 在计算 min 数组时,应该是  min[j] = a[j] < b[j] ? a[j] : b[j];  而不是  if(a>b){min=b;} ,因为需要取 a[j] 和 b[j] 中最小的值。

3. 在计算最长时间时,应该是  if (min[j] > c) { c = min[j]; }  而不是  if (min[j] > c) { c = b[j]; } ,因为需要取 min[j] 中最大的值。

修改后的代码如下:

  1. #include <stdio.h>
  2. int main()
  3. {
  4.     int m, n, c = 0;
  5.     scanf("%d %d", &m, &n);
  6.     int a[n], b[n], min[n];
  7.     for (int i = 0; i < n; i++)
  8.     {
  9.         scanf("%d", &a[ i]);
  10.         b[ i] = m - a[ i];
  11.         min[ i] = a[ i] < b[ i] ? a[ i] : b[ i];
  12.     }
  13.     for (int j = 0; j < n; j++)
  14.     {
  15.         if (min[j] > c)
  16.         {
  17.             c = min[j];
  18.         }
  19.     }
  20.     printf("%d", c);
  21.     return 0;
  22. }
复制代码


这样就可以通过全部测试用例了。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-10-1 23:33:41 | 显示全部楼层    本楼为最佳答案   
根据您提供的代码,我注意到其中存在几个问题导致无法通过全部测试用例。

首先,关于输入部分,请注意在循环中读取数组a时应该使用下标i,而不是只写&a。修正后的代码如下:

  1. scanf("%d", &a[ i]);
复制代码


接下来,在第一个循环中,您计算的b表示蚂蚁离热杆的距离,但是在赋值给min数组时,错误地把b赋给了min。应该将两者的位置互换,修正后的代码如下:

  1. if (a > b) {
  2.     min[ i] = b;
  3. } else {
  4.     min[ i] = a;
  5. }
复制代码


最后,求解最小距离的过程也存在问题。目前的代码逻辑是遍历min数组,找到最大的距离并赋给c。但是因为初始状态下c的值为0,所以无法正确找到最大值。可以通过将c的初始值设置为第一个元素的值来解决这个问题。修正后的代码如下:

  1. c = min[0];
  2. for (int j = 1; j < n; j++) {
  3.     if (min[j] > c) {
  4.         c = min[j];
  5.     }
  6. }
复制代码


综上所述,修正后的代码如下:

  1. #include <stdio.h>

  2. int main() {
  3.     int m, n, c = 0;
  4.     scanf("%d %d", &m, &n);
  5.     int a[n], b[n], min[n];

  6.     for (int i = 0; i < n; i++) {
  7.         scanf("%d", &a[ i]);
  8.         b[ i] = m - a[ i];
  9.         if (a[ i] > b[ i]) {
  10.             min[ i] = b[ i];
  11.         } else {
  12.             min[ i] = a[ i];
  13.         }
  14.     }

  15.     c = min[0];
  16.     for (int j = 1; j < n; j++) {
  17.         if (min[j] > c) {
  18.             c = min[j];
  19.         }
  20.     }

  21.     printf("%d", c);
  22.     return 0;
  23. }
复制代码


希望这次的修改能够帮助您通过更多的测试用例。如果还有其他问题,请随时提问。
如果问题已经解决,请设置最佳答案
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-12 00:24

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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