欢迎提出更好的方法
/*问题描述
请写一个程序,判断给定整数序列能否构成一个等差数列。
输入说明
输入数据由两行构成,第一行只有一个整数 n(n<100),表示序列长度(该序列中整数的
个数);
第二行为 n 个整数,每个整数互不相同,且取值区间都为[-32768~32767],整数之间以空格
间隔。
输出说明
对输入数据进行判断,若不能构成等差数列,将数列递增排序,分别输出排序后数据间的
最大差值和最小差值,数据间以空格分隔;
若能构成等差数列,将数列递增排序,并输出排序后各个数据在原数列中的对应位置(位置
计数从 1 开始)。
输入样例1
6
21 15 4 18 35 11
输出样例 1
14 3
样例 2 输入
5
2 6 8 4 10
样例 2 输出
1 4 2 3 5*/
#include <stdio.h>
#include <stdlib.h>
int main()
{
int change=0,n,j,k,minus,max,min;
int a[101],b[101];
scanf("%d",&n);
for(j=1;j<=n;j++)
{
scanf("%d",&a[j]);
b[j]=j;
}
for(j=1;j<n;j++)
{
for(k=j+1;k<=n;k++)
{
if(a[j]>a[k])
{
minus=a[j]; //为了少设一个变量,用minus来代替temp
a[j]=a[k];
a[k]=minus;
minus=b[j];
b[j]=b[k];
b[k]=minus;
}
}
}
max=min=minus=a[2]-a[1];
for(j=1;j<n;j++)
{
if(a[j+1]-a[j]!=minus)
{
change++;
if(a[j+1]-a[j]>max)
max=a[j+1]-a[j];
if(a[j+1]-a[j]<min)
min=a[j+1]-a[j];
}
}
if(change==0)
{
for(j=1;j<=n;j++)
printf("%d ",b[j]);
}
else
printf("%d %d",max,min);
return 0;
}