排序之后,最大最小值就已经确定,那么就可以直接判断出结果,不用再进行遍历比较了,以下是代码。
#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;
}
以上程序虽能提高些速度,但排序仍是问题的关键,实际上取得数组最大最小值只对数组进行一次遍历就可以做到,不用进行排序。
#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;
}
以上程序虽能提高些速度,但排序仍是问题的关键,实际上取得数组最大最小值只对数组进行一次遍历就可以做到,不用进行排序。