【蓝桥杯真题7 难度:中等】杨辉三角形 2022.12.1
本帖最后由 无理想的闲鱼 于 2023-1-19 09:28 编辑【2021】省赛
背景:
杨辉三角
杨辉三角,是二项式系数在三角形中的一种几何排列,中国南宋数学家杨辉1261年所著的《详解九章算法》一书中出现。
tip:
题目:
如果我们从上到下,从左到右把所有数字排成一列,可以得到以下数列:1,1,1,1,2,1,1,3,3,1,1,4,6,4,1,……
给定一个正整数N,请你输出数列中第一次出现N是在第几个数?
输入描述:输入一个整数N
输出描述:输出一个整数代表答案
输入示例1:6
输出示例1:13
输入示例2:154
输出示例2:11937
输入示例3:456
输出示例3:104198
**** Hidden Message ***** pos = 3
ts =
N = int(input())
if N == 1:
print("1")
else:
while True:
ts = + + ts for i in range(len(ts)-1)] +
if N in ts:
print( pos + ts.index(N) + 1)
break
else:
pos += len(ts) 学习 应该还可以用递归吧 来一个C凑热闹{:10_256:}
#include <stdio.h>
int n, tot = 1, a = {};
int main() {
a = 1;
scanf("%d", &n);
if (n == 1) {
puts("1");
return 0;
}
for (int i = 2; i <= 1000; ++i) {
for (int j = 1; j <= i; ++j) {
a = a + a;
++tot;
if (a == n) {
printf("%d", tot);
return 0;
}
}
}
} lxping 发表于 2022-12-1 13:22
应该还可以用递归吧
完全可以,组合数就是可以用递归来求啊,不过递推不香吗{:10_256:} 怎么又在审核啊 zhangjinxuan 发表于 2022-12-1 14:20
来一个C凑热闹
{:5_106:} import math
def FirstAppear(n):
ans = [((i * (i + 1) // 2) + j + 1) for i in range(n + 1) for j in range(n // 2 + 2) if math.comb(i,j) == n]
return ans
FirstAppear(6)
13
FirstAppear(154)
11937
FirstAppear(456)
104198 可怕 想领个币 都那么难 学习 这个我当年用C++做过作业 可怕 想领个币 都那么难 {:5_102:} 大神,我膜拜你 #杨辉三角
N = int(input('给定一个正整数N\n'))
def jiecheng(x):
#阶乘函数
a = 1
if x == 1:
return 1
else:
for i in range(1,x+1):
a *= i
return a
def fun1(x):
#生成杨辉三角的每一行
s = []
if x == 0:
s.append(1)
else:
for i in range(x + 1):
a = jiecheng(x)//(jiecheng(i) * jiecheng(x - i))
s.append(a)
return s
def fun2(x):
#将每一行从上到下,从左到右组合成一个列表
s =
for i in range(1,x+1):
a = fun1(i)
s.extend(a)
return s
def fun(x):
#寻找整数N的位置
i = 1
s = fun2(x)
while x not in s:
s = fun2(x + i)
i += 1
else:
a = 0
for i in s:
a += 1
if i == x:
return a
print(fun(N)) {:10_254:} 仰慕下大神 太难了吧|д)!! 全網了
页:
[1]
2