标题
等差数列及位置指示
类别
数组
时间限制
2S
内存限制
1000Kb
问题描述
请写一个程序,判断给定整数序列能否构成一个等差数列。
输入说明
输入数据由两行构成,第一行只有一个整数 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
#include<stdio.h>
int main()
{
int n,i,a[1000],j,t,cha,p=0,max,min,b[1000];
scanf("%d",&n);
for(i=0;i<n;i++)
{scanf("%d",&a[i]);b[i]=a[i];} //读入目标数字序列a,并且将a备份为b
for(i=0;i<n-1;i++)
{
for(j=i+1;j<n;j++)
{
if(a[i]>a[j])
{
t=a[j];
a[j]=a[i];
a[i]=t;
}
}
} //a数组从小到大的排序
cha=a[1]-a[0];max=cha;min=cha; //初始化序列中相邻两数的差值
for(i=0;i<n-1;i++)
{
if(a[i+1]-a[i]>max)
{
p=1;
max=a[i+1]-a[i];
}
if(a[i+1]-a[i]<min)
{
p=1;
min=a[i+1]-a[i];
}
} //判断差值是否相等,若不等则寻找最大差值和最小差值
if(p==1)
{printf("%d %d",max,min);} //p=1说明差值不等,不能构成等差数列
//则输出最大差值和最小差值
else if(p==0) //p=0 说明差值相等,能构成等差数列
{
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{ //分别将a序列中的每个数和b序列中的所有数作比较
if(a[i]==b[j])
{
printf("%d ",j+1); //若相同则输出其在b序列中的位置
} //即题目中要求输出的“数据在原数列中对应的位置”
}
}
}
return 0;
}