这是蓝桥杯杨辉三角的题目,需要给出数字,然后得到第一次出现数字的位置。
#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;
}
#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;
}