初莫M 发表于 2023-10-27 20:22:05

代码错在哪里了啊

题目描述
农夫约翰为了找到最“中间”的奶牛,正在调查他的牛群。一半奶牛的产奶量不多于这只“中间”奶牛,另一半的产奶量不少于这只“中间”奶牛。约翰想知道这只“中间”奶牛的产奶量是多少。

给出一个奇数 N
表示奶牛总数,以及它们的产奶量 Ci
,要求找出“中间”产量。1≤N≤10000
, 1≤Ci≤1000000


输入描述
第 1 行一个正整数 N


第 2∼N+1
行,每行一个正整数,表示其中一只奶牛的产奶量。

输出描述
一行一个整数,表示“中间”产量的一个整数。
#include<bits/stdc++.h>
using namespace std;
int main()
{
    int n,a,i,j,t;
    cin>>n;
    for(i=0;i<n;i++)
    {
      cin>>a;
    }
    for(i=0;i<n-1;i++)
    {
      for(j=0;j<n-1-i;j++)
      {if(a>a)
            {
                t=a;a=a;a=t;
            }
      }
      printf("%d",a);
    }
}

isdkz 发表于 2023-10-27 20:22:12

代码中有两个问题导致结果不正确:

1. 输出语句的位置不正确。应该将printf("%d",a);放在第二个循环结束后,而不是放在第二个循环的内部。因为我们需要找到排序后的中间奶牛的产奶量,所以应该在排序完成后输出。

2. 数组a的大小应该为10000 ,而不是10000 。因为题目中给出的奶牛总数N最大为10000 ,所以数组a的大小应该为10000 。

下面是修改后的代码:

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int n,a,i,j,t;
    cin>>n;
    for(i=0;i<n;i++)
    {
      cin>>a[ i];
    }
    for(i=0;i<n-1;i++)
    {
      for(j=0;j<n-1-i;j++)
      {
            if(a>a)
            {
                t=a;
                a=a;
                a=t;
            }
      }
    }
    printf("%d",a);
    return 0;
}


这样修改后的代码应该能够正确地找到中间产量的奶牛。

Mike_python小 发表于 2023-10-27 20:23:08

这段代码存在两个问题:

1. 循环嵌套错误:在第二个循环中,内层循环应该是从0到n-2-i,而不是n-1-i。修正为:


for (j = 0; j < n - 1 - i; j++)


2. 输出位置错误:在内层循环结束后直接输出产量会导致每次比较后都输出一个值,而不是在排序完成后输出中间产量。将输出语句移动到外层循环之后即可:


printf("%d", a);


修改后的代码如下所示:


#include<bits/stdc++.h>
using namespace std;

int main() {
    int n, a, i, j, t;
    cin >> n;
    for (i = 0; i < n; i++) {
      cin >> a;
    }
    for (i = 0; i < n - 1; i++) {
      for (j = 0; j < n - 1 - i; j++) {
            if (a > a) {
                t = a;
                a = a;
                a = t;
            }
      }
    }
    printf("%d", a);
}


请注意排版和缩进,以保持代码的清晰可读性。

球一个最佳答案谢谢啦!这对我非常重要!{:10_254:}{:10_254:}{:10_254:}
页: [1]
查看完整版本: 代码错在哪里了啊