链接: 杨辉三角题详解Java.
这个博客讲的算清楚的,就是我对于Check还是一知半解。。。
注意要点
- long long 类型是AC的关键!!!
#include#include using namespace std; long long N; //计算组合数 long long C(int a, int b) { long long sum = 1; for (int i = a, j = 1; j <= b; i--, j++) { sum = sum*i / j; if (sum>N) { return sum; } } return sum; } bool check(int k) { long long rRow = 2 * k;//斜着看的那一行 以第k行为基准 右斜上有 2k个行 long long lRow = max(rRow, N);//斜着看的那一行 左斜下是找N和rightRow 最大值 while (rRow > 1; if (C(mid, k) >= N) { lRow = mid; } else { rRow = mid + 1; } } if (C(lRow, k) !=N )return false; else { cout << (long long)((1 + lRow)*lRow / 2 + (k + 1)); return true; } } int main() { cin >> N; for (int i = 16; ;i--) { if (check(i))break; } return 0; }



