这是蓝桥杯杨辉三角的题目,需要给出数字,然后得到第一次出现数字的位置。
自己写的代码是这样的,用的是二分查找,依据的是类似该博主的方法http://t.csdn.cn/tC8uL
运行不出来结果,找了半天问题就是找不到在哪。
#include <stdio.h>
#include <stdlib.h>
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;
}