鱼C论坛

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

[已解决]代码错在哪里了啊

[复制链接]
发表于 2023-10-27 20:22:05 | 显示全部楼层 |阅读模式

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

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

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

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


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


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

输出描述
一行一个整数,表示“中间”产量的一个整数。
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. int main()
  4. {
  5.     int n,a[10000],i,j,t;
  6.     cin>>n;
  7.     for(i=0;i<n;i++)
  8.     {
  9.         cin>>a[i];
  10.     }
  11.     for(i=0;i<n-1;i++)
  12.     {
  13.         for(j=0;j<n-1-i;j++)
  14.         {if(a[j]>a[j+1])
  15.             {
  16.                 t=a[j];a[j]=a[j+1];a[j+1]=t;
  17.             }
  18.         }
  19.         printf("%d",a[n/2]);
  20.     }
  21. }
复制代码
最佳答案
2023-10-27 20:22:12
代码中有两个问题导致结果不正确:

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

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

下面是修改后的代码:

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. int main()
  4. {
  5.     int n,a[10000],i,j,t;
  6.     cin>>n;
  7.     for(i=0;i<n;i++)
  8.     {
  9.         cin>>a[ i];
  10.     }
  11.     for(i=0;i<n-1;i++)
  12.     {
  13.         for(j=0;j<n-1-i;j++)
  14.         {
  15.             if(a[j]>a[j+1])
  16.             {
  17.                 t=a[j];
  18.                 a[j]=a[j+1];
  19.                 a[j+1]=t;
  20.             }
  21.         }
  22.     }
  23.     printf("%d",a[n/2]);
  24.     return 0;
  25. }
复制代码


这样修改后的代码应该能够正确地找到中间产量的奶牛。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-10-27 20:22:12 | 显示全部楼层    本楼为最佳答案   
代码中有两个问题导致结果不正确:

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

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

下面是修改后的代码:

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. int main()
  4. {
  5.     int n,a[10000],i,j,t;
  6.     cin>>n;
  7.     for(i=0;i<n;i++)
  8.     {
  9.         cin>>a[ i];
  10.     }
  11.     for(i=0;i<n-1;i++)
  12.     {
  13.         for(j=0;j<n-1-i;j++)
  14.         {
  15.             if(a[j]>a[j+1])
  16.             {
  17.                 t=a[j];
  18.                 a[j]=a[j+1];
  19.                 a[j+1]=t;
  20.             }
  21.         }
  22.     }
  23.     printf("%d",a[n/2]);
  24.     return 0;
  25. }
复制代码


这样修改后的代码应该能够正确地找到中间产量的奶牛。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-10-27 20:23:08 | 显示全部楼层
这段代码存在两个问题:

1. 循环嵌套错误:在第二个循环中,内层循环应该是从0到n-2-i,而不是n-1-i。修正为:
  1. for (j = 0; j < n - 1 - i; j++)
复制代码

2. 输出位置错误:在内层循环结束后直接输出产量会导致每次比较后都输出一个值,而不是在排序完成后输出中间产量。将输出语句移动到外层循环之后即可:
  1. printf("%d", a[n / 2]);
复制代码

修改后的代码如下所示:
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. int main() {
  4.     int n, a[10000], i, j, t;
  5.     cin >> n;
  6.     for (i = 0; i < n; i++) {
  7.         cin >> a[i];
  8.     }
  9.     for (i = 0; i < n - 1; i++) {
  10.         for (j = 0; j < n - 1 - i; j++) {
  11.             if (a[j] > a[j + 1]) {
  12.                 t = a[j];
  13.                 a[j] = a[j + 1];
  14.                 a[j + 1] = t;
  15.             }
  16.         }
  17.     }
  18.     printf("%d", a[n / 2]);
  19. }
复制代码

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

球一个最佳答案谢谢啦!这对我非常重要!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-22 01:01

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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