| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2183 人关注过本帖
标题:丢失的数字:新手求大神指教啊啊啊!运行正确,但是提交就错了
只看楼主 加入收藏
jklqwe111
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:35
帖 子:336
专家分:1135
注 册:2014-4-13
收藏
得分:0 
排序之后,最大最小值就已经确定,那么就可以直接判断出结果,不用再进行遍历比较了,以下是代码。

#include<stdio.h>
#include<stdlib.h>
cmp(const void*a,const void*b)
{
    return *(int *)a-*(int *)b;
}

int main()
{
    int n,j=1;
    while(scanf("%d",&n)!=EOF)
    {
        if(n==0) break;
        int a[10020],i;
        for(i=0;i<n;i++)
        scanf("%d",&a[i]);
        qsort(a,n,sizeof(int),cmp);
        printf("case  %d :\n",j);
        printf("%c\n",a[n-1]-a[0]+1==n?'S':'M');
        j++;
    }
    return 0;
}

以上程序虽能提高些速度,但排序仍是问题的关键,实际上取得数组最大最小值只对数组进行一次遍历就可以做到,不用进行排序。
2016-07-10 16:15
jklqwe111
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:35
帖 子:336
专家分:1135
注 册:2014-4-13
收藏
得分:0 
以下代码可以取得数组的最大最小值

int i,min,max;
if(a[0]<a[1])
{
    min=a[0];
    max=a[1];
}
else
{
    min=a[1];
    max=a[0];
}
for(i=2;i<n;i++)
{
   if(a[i]<min) min=a[i];
   else if(a[i]>max) max=a[i];
}

用这个方法替换排序就得到以下程序
#include<stdio.h>
int main()
{
    int n, j=1,min,max;
   
    while(scanf("%d",&n)!=EOF)
    {
        if(n==0) break;
            int a[10020],i;
            for(i=0;i<n;i++)
            scanf("%d",&a[i]);
            
            if(a[0]<a[1])
            {
                min=a[0];
                max=a[1];
            }
            else
            {
                min=a[1];
                max=a[0];
            }
            for(i=2;i<n;i++)
            {
                if(a[i]<min) min=a[i];
                else if(a[i]>max) max=a[i];
            }
        printf("case  %d :\n",j);
        printf("%c\n",max-min+1==n?'S':'M');
   
        j++;
    }
    return 0;
}

再进一步可以在输入数据时进行比较,不用保留数据,也就省去了数组空间。
2016-07-10 16:49
快速回复:丢失的数字:新手求大神指教啊啊啊!运行正确,但是提交就错了
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.053113 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved