總共有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); } } }