首页 > 试题广场 >

等差数列

[编程题]等差数列
  • 热度指数:173 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
如果一个数列S满足对于所有的合法的i,都有S[i + 1] = S[i] + d, 这里的d也可以是负数和零,我们就称数列S为等差数列。
小易现在有一个长度为n的数列x,小易想把x变为一个等差数列。小易允许在数列上做交换任意两个位置的数值的操作,并且交换操作允许交换多次。但是有些数列通过交换还是不能变成等差数列,小易需要判别一个数列是否能通过交换操作变成等差数列

输入描述:
输入包括两行,第一行包含整数n(2 ≤ n ≤ 50),即数列的长度。
第二行n个元素x[i](0 ≤ x[i] ≤ 1000),即数列中的每个整数。


输出描述:
如果可以变成等差数列输出"Possible",否则输出"Impossible"。
示例1

输入

3
3 1 2

输出

Possible
#不做任何异常处理,在正常输入,正常执行的情况,并且感觉长度参数无关紧要
x=int(input('请输入一个整数:'))
y=input('请输入一串数值:')
l=y.split(' ')
sorted(l,key=lambda x:x,reverse=True)
s=int(l[1])-int(l[0])
for i in range(1,len(l)):
    if int(l[i])-int(l[i-1])!=s:
        print('Impossible')
        break
else:
    print('Possible')

发表于 2019-08-19 18:07:01 回复(0)
importsys
s=sys.stdin.readlines()
n=int(s[0].strip())
number=[int(i) fori ins[1].strip().split()]
number.sort()
d=number[1]-number[0]
fori inrange(n-1):
    ifnumber[i+1]-number[i]==d:
        ifi+1==n-1:
            print('Possible')
        continue
    else:
        print('Impossible')
        break
发表于 2020-03-19 21:26:13 回复(0)
def sort(x,n):
    x.sort(reverse=True)
    tmp = x[1] - x[0]
    result = 'Possible'
    for i in range(2,n):
        if x[i] - x[i-1] != tmp:
            result = 'Impossible'
    print(result)
            
if __name__ == '__main__':
    n = int(input())
    x = list(map(int,input().strip().split()))
    sort(x,n)


#Python3
发表于 2019-09-10 12:59:20 回复(0)
//累加求和sum1 
//排序 
//用等差数列求和公式求sum2,并比较
#include<stdio.h>
void bubble(int a[],int n)
{
	int i,j;
	int min = 0;
	for(i=0;i<n-1;i++)
	{
		for(j=0;j<n-1-i;j++)
		{
			if(a[j+1]<a[j])
			{	min=a[j+1];a[j+1]=a[j];a[j]=min;	}
		}
	}
}
int main()
{
	int a[50] = {0},n;
	int i;
	float sum1 = 0.0,sum2 = 0.0;
	float d = 0.0;
	scanf("%d",&n);
	for(i=0;i<n;i++)
	{
		scanf("%d",&a[i]);
		sum1 += a[i];
	}
	bubble(a,n);
	d = a[1]-a[0];
	sum2 = a[0]*n+d*n*(n-1)/2;
	if(sum1 == sum2)
		printf("Possible");
	else printf("Impossible");
	return 0;
 } 

发表于 2019-08-19 17:27:56 回复(1)