题目描述
分析(实现方法1)
由题知每行(第1行、第2行…)coin的变化是1,2,3,4,5…..,即等差数列。若第k行刚好填满,则所有的coins数为Sk= k(k+1)/2。假设令2*Sk=m*m,则k(k+1)=m*m,可得m*m>k*k。也即k势必会比2*Sk开方的值小,但不会小太多。对于输入n,那么我们可以从m(m=sqrt(2*n))开始验算,看其附近有没有满足k(k+1)=2*n的存在,有,则说明coin的最后一行都是排满的。没有的话,那么第一个小于2*n的k值即为最大的行数值。
代码实现(对应实现方法1)
int arrangeCoins(int n) {
double pro;
int k;
if(n==0||n==1)