等差数列
题目:如果一个数列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"。
示例:
3
3 1 2
输出:Possible
前言
5月底了,可能找不到实习了,但还是加油吧。这几天的精神状态都不是很好,争取早日调整过来。
思路
判断等差数列很简单,后项减前项是否是一个常数。
代码
package mianshiti;
import java.util.Scanner;
public class mianshiti7 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner scan=new Scanner(System.in);
int len=scan.nextInt();
int [] array=new int [len];
for(int i=0;i<len;i++) {
array[i]=scan.nextInt();
}
sort(array);
int d=array[1]-array[0];
int count=0;
for(int i=0;i<len;i++) {
int j=i+1;
if(j<len&&array[j]-array[i]==d) {
count++;
}
}
if(count==len-1) {
System.out.print("Possible");
}else {
System.out.print("Impossible");
}
}
private static int [] sort(int[] array) {
// TODO Auto-generated method stub
int len=array.length;
for(int i=0;i<len;i++) {
for(int j=0;j<len;j++) {
int temp;
if(array[i]>array[j]) {
temp=array[i];
array[i]=array[j];
array[j]=temp;
}
}
}
return array;
}
}