3.29百度笔试编程题前两题答案
总结:第一题比较简单些,第二题写到快结束,输出结果是int型,一直为0.00,后来恍然大悟将结果转成long型AC了。算法太难了,第三题一点思路都没,欢迎大佬给出思路。
第一题:
public class Main05 {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
while (in.hasNext()){
long n = in.nextInt();
long a = n;
long b = n - 1;
System.out.println(a*b-1);
}
}
}
第二题:
第二题的主要思路是,因为数最大为10^18,所以如果用减法的话则会复杂度过高,重复的减法便是除法,然后先算一个最大的数,这里我用了排序,
减去n多少次后,会小于n,便是除法的结果,然后再将结果加到其他n-1个数,继续循环即可。
Scanner in = new Scanner(System.in);
while (in.hasNext()){
int n = in.nextInt();
long[] a = new long[n];
for(int i=0;i<n;i++){
a[i] = in.nextLong();
}
Arrays.sort(a);
if(a[n-1]<n){
System.out.println(0);
continue;
}
long num = n;
long count = 0;
while (a[n-1]>=n){
count = count + a[n-1]/num;
for(int i=0;i<n-1;i++){
a[i] = a[i] + a[n-1]/num;
}
a[n-1] = a[n-1]%num;
Arrays.sort(a);
}
System.out.println(count);
}
