蓝桥杯杨辉三角数字位置问题

这是蓝桥杯杨辉三角的题目,需要给出数字,然后得到第一次出现数字的位置。

img


自己写的代码是这样的,用的是二分查找,依据的是类似该博主的方法http://t.csdn.cn/tC8uL
运行不出来结果,找了半天问题就是找不到在哪。

#include 
#include 

int num = 0;

int max(int a,int b)
{
    if (a > b)return a;
    else return b;
}

long long Cab(int a,int b)
{
    long long t = 1;
    for (int i = 1; i <= a; i++)
    {
        t = t * b / i;
        b--;
        if (t > num) return t;
    }
    return t;

    
}

int find(int k)
{
    long long pation = 0;
    long long l = 2 * k;
    long long r = max(l, num);
  
    while (l < r)
    {
        int mid = (l + r) / 2;
        if (Cab(k, r) >= num) r = mid;
        else l = mid + 1;
    }
    if (Cab(k, r) != num)
    {
        return 0;
    }
    else
    {
        pation = (r + 1) * r / 2 + k + 1;
        printf("%lld", pation);
        return 1;
    }
    
}


int main(int argc, char* argv[])
{
    
    scanf("%d", &num);
    if (num == 1)
    {
        printf("%d", 1);
        return 0;
    }
    for (int i = 16; i >= 1; i--)
    {
        if (find(i)) break;
    }

    return 0;
}

img


#include <stdio.h>
#include <stdlib.h>

#define _CRT_SECURE_NO_DEPRECATE
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#define M 34
int main()
{
    int n;
    int i, j;
    int y[M][M];
    scanf_s("%d", &n);
    for (int i = 0; i < n; i++)
    {
        y[i][0] = 1;
        y[i][i] = 1;//杨辉三角形每行第一列和最后一列数据都为1 
        for (int j = 1; j < i; j++)
        {
            y[i][j] = y[i - 1][j - 1] + y[i - 1][j];//每个数字等于肩上两数字之和 
        }
    }
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j <= i; j++)
        {
            printf("%d ", y[i][j]);
        }
        printf("\n");
    }
    return 0;
}