考虑一个非零正整数inarr的数组。根据以下逻辑识别并打印数字输出:
·在可以顺序排列inarr中整数的每种可能方式中,识别相邻值的最大绝对差
o最后一个和第一个整数是相邻的
·打印输出数值,上确定的最大差异的最小值
输入:
第一行表示数组inarr,其元素由","(逗号(分隔
从标准输入流读取输入
输出:
将输出编号打印到标准输出流
样本输入样本输出说明
5,10,6,8 4
对于给定的inarr,整数可以排列的所有可能方式的相邻值的最大绝对差如下:
5,10,6,8:
5-10=5à绝对最大差值
10-6=4
6-8=2
8-5=3
同样,对于其他可能的方式:
5,10,8,6-绝对最大差值=5
5,6,8,10-绝对最大差值=5
5,6,10,8-绝对最大差值=4
5,8,6,10-绝对最大差值=5
5,8,10,6-绝对最大差值=4
10,5,6,8-绝对最大差值=5
10,5,8,6-绝对最大差值=5
10,6,5,8-绝对最大差值=4
10,6,8,5-绝对最大差值=5
10,8,6,5-绝对最大差值=5
10,8,5,6-绝对最大差值=4
6,5,10,8-绝对最大差值=5
6,5,8,10-绝对最大差值=4
6,8,5,10-绝对最大差值=5
6,8,10,5-绝对最大差值=5
6,10,5,8-绝对最大差值=5
6,10,8,5-绝对最大差值=4
8,5,6,10-绝对最大差值=4
8,5,10,6-绝对最大差值=5
8,6,5,10-绝对最大差值=5
8,6,10,5-绝对最大差值=5
8,10,5,6-绝对最大差值=5
8,10,6,5-绝对最大差值=4
最大差值之间的最小值为4
这可能对有用
def permutation(lst):
if len(lst) == 0:
return []
if len(lst) == 1:
return [lst]
l = []
for i in range(len(lst)):
m = lst[i]
remLst = lst[:i] + lst[i+1:]
for p in permutation(remLst):
l.append([m] + p)
return l
data = [5,10,6,8]
got = []
for a in permutation(data):
result = []
for i in range(len(a)+1):
if i > len(a)/2:
result.append(abs(a[len(a)-1] - a[0]))
else:
result.append(abs(a[i] - a[i+1]))
max_value = max(result)
got.append(max_value)
print(list(set(sorted(got)))[0])
int main()
{
vector<int> vect = {5, 10, 6, 8};
sort(vect.begin(), vect.end());
int n = vect.size();
int mid = n / 2;
reverse(vect.begin() + mid, vect.end());
for (int i = 0; i < n; i++)
cout << vect[i] << " ";
cout << endl;
int maxx = INT_MIN;
for (int i = 1; i < vect.size(); i++)
{
maxx = max(maxx, abs(vect[i] - vect[i - 1]));
}
cout << maxx << endl;
return 0;
}
package com.company;
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws Exception {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
String [] str = bf.readLine().split(",");
int arr[] = new int[str.length+1];
for (int i=0;i<str.length;i++){
arr[i] = Integer.parseInt(str[i]);
}
for (int i=0;i< str.length;i++){
int maxdif = 0;
int diff =0;
diff = arr[i] - arr[i+1];
maxdif = diff;
checkmax(Math.abs(diff));
System.out.println(Math.abs(maxdif));
// 5,10,6,8
}
}
public static int checkmax(int diff){
int []num = new int[200];
while (0<diff)
System.out.println(num[]);
return 0;
}
}
下面的代码应该可以解决这个问题。
CCD_ 1返回一个数组的相邻数的最大绝对差。
minMaxAbsDiff()
在数组的所有排列上迭代,并返回最小的最大绝对差。
import itertools
def maxAbsDiff(arr):
max = 0
for i in range(len(arr)-1):
diff = abs(arr[i+1] - arr[i])
if diff > max:
max = diff
diff = abs(arr[len(arr)-1] - arr[0])
if diff > max:
max = diff
return max
def minMaxAbsDiff(arr):
min = -1
permutations = list(itertools.permutations(arr))
for i in range(len(permutations)):
diff = maxAbsDiff(permutations[i])
if (min < 0) or (diff < min):
min = diff
return min
def input_intArr():
str_in = input()
str_arr = [x.strip() for x in str_in.split(",")]
arr = []
for i in range(len(str_arr)):
arr.append(int(str_arr[i]))
return arr
print(minMaxAbsDiff(input_intArr()))