VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 196|回复: 6

[求助] 跪求大佬指点迷津 PS:我TM写的程序为啥老是得零蛋

[复制链接]
86_avatar_middle
在线会员 发表于 2019-8-11 22:48:27 | 显示全部楼层 |阅读模式
3驿站币
#include <stdio.h>
        int a[100000];
int main()
{

        int n,high,low,m2,m;
        float mid;
        scanf("%d",&n);

        for(int i=1;i<=n;i++)
                scanf("%d",&a[i]);

        if(n==1)
        {
                printf("%d %d %d",a[1],a[1],a[1]);
            return 0;
        }
    if(a[1]<a[n])
        {
                high=a[n];
                low=a[1];
        }
        else
        {
                        high=a[1];
                low=a[n];
        }
        if(n%2==1)
        {

                m=n/2+1;
                m2=a[m];
        }
        else
        {
                m=n/2;
                if(a[m]%2==a[m+1]%2)
                {
                                m2=(a[m]+a[m+1])/2;
                }
                else
                {
                        mid=(float)(a[m]+a[m+1])/2;
                    printf("%d %.1f %d",high,mid,low);
                return 0;
                }
        }
                printf("%d %d %d",high,m2,low);
                return 0;
}

TIM图片20190811224349.png




上一篇:为啥我的CWatchCtrl不见了,要咋样才能弄回来?
下一篇:c语言学习书籍问题
37_avatar_middle
在线会员 发表于 2019-8-12 11:45:24 | 显示全部楼层
数组的第一个是a[0]
37_avatar_middle
在线会员 发表于 2019-8-12 11:53:29 | 显示全部楼层
要排序,再求最大、最小值,中位数。
59_avatar_middle
在线会员 发表于 2019-8-12 20:32:46 | 显示全部楼层
本帖最后由 aladdin_h 于 2019-8-12 20:39 编辑

我可能知道了,就是当数字总数为偶数时,中位数为整数时,要整数输出,不能是1.0这样子的。下面我稍微修改了一下,应该可以AC了。
希望能帮到你。
这个题目考察点应该是这个:https://blog.csdn.net/zer1123/article/details/56039477
  1. #include <stdio.h>
  2. float a[100000];                //定义为float,因为int忽略了小数,在后面的话不好处理。
  3. int main()
  4. {
  5.         int n,high,low,m2,m;
  6.         float mid;
  7.         scanf("%d",&n);

  8.         for(int i=1;i<=n;i++)
  9.                 scanf("%f",&a[i]);

  10.         if(a[1]<a[n]){
  11.                 high=a[n];
  12.                 low=a[1];
  13.         }
  14.         else {
  15.                 high=a[1];                //当n=1时,可以改到这里来。
  16.                 low=a[n];
  17.         }
  18.        
  19.         if(n%2==1){
  20.                 m=n/2+1;
  21.                 mid=a[m];
  22.         }
  23.         else{
  24.                 m=n/2;
  25.                 mid=(a[m]+a[m+1])/2;
  26.         }
  27.        
  28.         if (mid !=(int)mid )        //判断是否为小数
  29.                 printf("%d %.1f %d",high,mid,low);
  30.         else
  31.                 printf("%d %d %d",high,(int)mid,low);
  32.         return 0;
  33. }
复制代码

跪求大佬指点迷津 PS:我TM写的程序为啥老是得零蛋
84_avatar_middle
在线会员 发表于 2019-8-12 23:03:08 | 显示全部楼层
#include <stdio.h>
int main()
{
int a[];

int n,max,min;
int temp;
float mid;

printf("请输入测量数据数量")
scanf("%d\n",&n);

for(int i=0;i<n;i++){

scanf("%d",&a[i]);   //数组第一个元素为a[0]

if(n>=1) {                //因为第一个元素为0.n不需要区分多种数值
        max=a[0];
        min=a[0];

        for(int j=0;j<n;j++){
                if(max<a[j])
                max=a[j];

                if(min>a[j])
                min=a[j];

                if(n%2==1)
                mid=a[(n-1)/2];

                else
                mid=(a[n/2]+a[n/2+1])/2;

                if (mid !=(int)mid )        //判断是否为小数(这个我不会,抄楼上仁兄的)
                printf("%d %.1f %d",max,mid,min);
                else
                printf("%d %d %d",max,mid,minw);

                }

        for(int i=0;i<n;i++){
                        if(i+1<n){
                                if a[i]>a[i+1]{
                                temp=a[i];
                                a[i]=a[i+1];
                                a[i+1]=temp;
                                }

                        }
                        if(i+1=n){
                                if a[i-1]>a[i]{
                                temp=a[i-1];
                                a[i-1]=a[i];
                                a[i]=temp;
                                }
               
                }
        }

for(int i=0;i<n;i++){printf("%d  ",a[i])}

        }
else
printf("请重新测量数据数量");
scanf("%d\n",&n);
}

}


84_avatar_middle
在线会员 发表于 2019-8-12 23:05:44 | 显示全部楼层
因为数组首元素为a[0],所以mid=(a[n/2]+a[n/2+1])/2;应该改成mid=(a[n/2]+a[n/2-1])/2
只是试着写了写,没验证程序是否有误
84_avatar_middle
在线会员 发表于 2019-8-12 23:16:19 | 显示全部楼层
for(int i=1;i<n;i++){
                if a[i-1]>a[i]{
                temp=a[i-1];
                a[i-1]=a[i];
                  a[i]=temp;
                                }
               
                }
        }

for(int i=0;i<n;i++){printf("%d  ",a[i])}


输出数组的话,这个比上边那个判断i+1和n会更好点,但是需要判断n的数值
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号tongdun|网站地图wx_jqr

GMT+8, 2019-8-26 11:53

Powered by Discuz! X3.4

© 2009-2019 cctry.com

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