今天在群里看到了个面试题大致内容为:
第一天给一块钱,后面两个每天给两块,在后面三天给三块,问给定一个天数,总和给了多少?
1 2 2 3 3 3 4 4 4 4 5 ......
没有完整给钱的天数例如11天
1 2 2 3 3 3 4 4 4 4 5
仔细观察发现问题的本质:
总和==完整给钱的天数+后面不能促成平方和公式天数*给的钱
public static int sumMoney(int n) {
for (int i = n; i > 0; i--) {
for (int j = 1; j < Math.sqrt(i)+1 ; j++) {
//这里就是判断完整给的钱数是多少钱
if ((((1 + j) * j) / 2) ==i){
//最后要加上没有完整给钱的钱数
return (j*(j+1)*((2*j)+1))/6 + (n-i)*(j+1);
}
}
}
return -1;
}