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); }