题目描述
传说fans是一个数学天才。在他五岁那年,从一堆数字卡片中选出了4张 卡片:5,7,6,8。这4个数字有什么神秘之处呢?如果把这4张卡片自左往右的排成:5,6,7,8。你就会发现:原来这4个数字构成了等差数列!当年 fans选出了n组卡片,据说都能够构成等差数列。但是事实真的是这样吗?fans真的有这么神奇吗? n组数据就是fans选出的n组卡片,请你判断每一组卡片是否能构成等差数列.
输入
第一个数为数据的组数n,表示后面有n行,每行中的第一个数为该组数据的元素个数m(1≤m≤100),其后是m个正整数(不会超出int的表示范围)。
输出
如果能够构成等差数列,输出“yes”,否则输出“no”。
样例输入
4 5 7 6 8
8 1 7 3 2 8 12 78 3
样例输出
yes
no
思路
1.先用数组将数列进行储存,在进行排序
2.通过等差数列的性质来判断是否为等差数列
代码
#include <stdio.h>
#include <string.h>
struct ARR
{
int arr[100];
char jie[10];
};
int main()
{
int n;
scanf("%d",&n);
struct ARR arr[n];
int d;
for(int i=0;i<n;i++)
{
int m=0;
scanf("%d",&m);
for(int r=0;r<m;r++)
{
scanf("%d",&arr[i].arr[r]);
}
if(m==1)
{
strcpy(arr[i].jie,"no");
goto next;
}
for(int j=1;j<m;j++)
{
int temp=arr[i].arr[j]-arr[i].arr[j-1];
if(j==1)
d=temp;
if(d!=temp)
{
strcpy(arr[i].jie,"no");
goto next;
}
}
strcpy(arr[i].jie,"yes");
next:;
}
for(int i=0;i<n;i++)
{
printf("%s\n",arr[i].jie);
}
}