问题描述:
在数列a_ 1,a_2, n中,定义两个元素a_ i和a_ j的距离为|i+j|+la_ i-a_ j|,给定一个数列,请问找出元素之间最大的元素距离。
输入格式
输入的第一行包含一个整数 n。
第二行包含n个整数a 1,a_ 2.. n,相邻的整数间用空格分隔,表示给定的数列。
输出格式
输出一行包含一个整数, 表示答案。
样例输入
5
9 4 2 4 7
样例输出
9
样例说明
a_ 1和a 3的距离为|1-3|+|9-2|=9。
评测用例规模与约定
对于50%的评测用例,2<=n<=100,0<=数列中的数<=1000.
对于所有评测用例,2 <= n <= 1000, 0 <=数列中的数<= 10000。
C语言解决方法:
#include <stdio.h>
#include <math.h>
int main(){
int num[100],i,j,n,b=0,m=0,max=0;
scanf("%d",&n);//第一行
for(i=0;i<=n;i++){
scanf("%d",&num[i]);//第二行
}
for(i=0;i<n-1;i++){ // 数组从0开始
for(j=i+1;j<n;j++){ //j = i的下一个数 所以j=i+1
b = abs(i-j)+abs(num[i]-num[j]);
if(m > b){ //依次比较找出最大的元素距离
max = m;
}
else{
max = b;
}
m++;
}
}
printf("%d",max);
return 0;
}
运行结果示例:
python解决方法:
按照题目的要求,列表只能从1开始所以列表前面补零,i是从1开始的,而j开始遍历的时候,j就会比i永远多一个。
# 在数列a_ 1,a_2, n中,定义两个元素a_ i和a_ j的距离为|i+j|+la_ i-a_ j|,
# 给定一个数列,请问找出元素之间最大的元素距离。
n = int(input()) # 第一行输入整数
num = [0] + list(map(int, input().split(" "))) # 因为列表第一个数为0 所以+0
max_1 = 0
for i in range(1, n):
for j in range(i+1, n+1):
a = j-i + abs(num[j] - num[i])
if a > max_1:
max_1 = a
print(max_1)
运行结果示例:
总结