总共有n枚硬币,将它们摆成一个阶梯形状,第k行就必须正好有k枚硬币。ide
给定一个数字n,找出可造成完整阶梯行的总行数code
n是一个非负整数,而且在32位有符号整型的范围内it
public class ArrangeCoin { public static void main(String[] args) { System.out.println(arrangeCoins(10)); } //穷取,迭代 public static int arrangeCoins(int n){ for (int i=1;i<=n;i++){ n=n-i; if (n<=i){ return I; } } return 0; } //二分查找 public static int arrangeCoins1(int n){ int low=0,high=n; while (low <= high){ int mid =(high-low)/2+low;//行数 int cost = ((mid+1)*mid)/2;//总共要消耗的硬币数量 if (cost == n){ return mid; }else if(cost>n){ high = mid-1; }else { low = mid +1; } } return 0; } //牛顿迭代 public static int arrangeCoins2(int n){ if(n==0){ return 0; } return (int)sqrt(n,n); } public static double sqrt(double i,int x){ double res = (i+(2*i-x)/i)/2; if (res == i){ return I; }else{ return sqrt(res,x); } } }