原题链接在牛客上的题目笔试题,大家有兴趣也可以去做做
一.题目
老板给度度熊n个数,每一次从a【i】中取出一个最大的数减去n,其他n-1个数加上1,一直重复直到最大的a[ i ]<n,执行次数为k,老板想知道最少要执行多少次操作才能使n个数都小于n?
输入描述:
第一行一个数。
第二行个数表示数列。
输出描述:
一个数表示
示例1
输入例子:
3
1 0 3
输出例子:
1
二.解析
直接上代码了!代码关键部分写在注释里了,希望能帮助到大家
import java.util.*;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
long[] a = new long[n];
for(int i =0 ;i < n;i ++) {
a[i] = in.nextLong();
}
long sum = 0;
while(!valid(a)) {
long max = 0;
int index =0 ;
for(int i = 0;i < n;i ++) {
if(a[i] > max) {
max = a[i];
index = i;
}
}
sum += max / n; // 把最大的恰好变小需要多少次
for(int i = 0 ;i <n;i ++) {
a[i] += max / n; // 其余的都加上多少次个1
}
a[index] = max % n;
}
System.out.println(sum);
}
public static boolean valid(long[] a) {
for(long aa : a) {
if(aa >= a.length) return false;
}
return true;
}
}