蓝桥杯 《杨辉三角形》

题目描述

下面的图形是著名的杨辉三角形:

image

如果我们按从上到下、从左到右的顺序把所有数排成一列,可以得到如下数列: 1, 1, 1, 1, 2, 1, 1, 3, 3, 1, 1, 4, 6, 4, 1,

给定一个正整数 N,请你输出数列中第一次出现 N 是在第几个数?

输入描述

输入一个整数 N。

输出描述

输出一个整数代表答案。

输入输出样例

输入 : 6

输出 :13

代码:
#include<bits/stdc++.h>
#define int long long//要把int main改为signed main
using namespace std;
int n;
int C(int a , int b){
    int res = 1;
    for(int i = a , j = 1 ; j <= b ; i -- , j ++){
        res = res * i / j;
        if(res > n) return res;
    }
    return res;
}
signed main()
{
    cin >> n;
    for(int k = 16 ; ~k ; k --){
        int l = 2 * k , r = max(n , l) , res = -1;
        while(l <= r){
            int mid = l + r >> 1;
            if(C(mid , k) >= n) res = mid , r = mid - 1;
            else l = mid + 1;
        }
        if(C(res , k) == n) return cout << (res + 1) * res / 2 + k + 1 << '\n' , 0;
    }
    return 0;
}

 

posted @ 2022-04-08 10:43  弈星  阅读(133)  评论(0)    收藏  举报