题目描述
下面的图形是著名的杨辉三角形:
如果我们按从上到下、从左到右的顺序把所有数排成一列,可以得到如下数列: 1,1,1,1,2,1,1,3,3,1,1,4,6,4,1,⋯
给定一个正整数 N,请你输出数列中第一次出现 N是在第几个数?
输入描述
输入一个整数 N。
输出描述
输出一个整数代表答案。
输入输出样例
示例:输入6,输出13
评测用例规模与约定
对于 20% 的评测用例,1≤N≤10; 对于所有评测用例,1≤N≤1000000000
题目分析:作者的代码并不适用于所有评测用例,属于暴力枚举。较为正确的做法为通过杨辉三角排列组合公式,得出输入数字与公式的关系。
#include<stdio.h>
int main()
{
int a[100][100];
int b[10000];
int i,j,k=1,y,num;
scanf("%ld",&num);
for(i=0;i<100;i++)
{
a[i][0]=1;
a[i][i]=1;
}
for(i=2;i<100;i++)
{
for(j=1;j<i;j++)
{
a[i][j]=a[i-1][j-1]+a[i-1][j];
}
}
for(i=0;i<100;i++)
{
for(j=0;j<=i;j++)
{
b[k]=a[i][j];
k++;
}
}
for(y=1;y<k;y++)
{
if(num==b[y])
{
printf("%d ",y);
break;
}
}
return 0;
}