第十二届蓝桥杯省赛 C++ B组 - 杨辉三角形

简介: 第十二届蓝桥杯省赛 C++ B组 - 杨辉三角形

问题描述

下面的图形是著名的杨辉三角形:

如果我们按从上到下、从左到右的顺序把所有数排成一列,可以得到如下数列:

1, 1, 1, 1, 2, 1, 1, 3, 3, 1, 1, 4, 6, 4, 1, …

给定一个正整数 N,请你输出数列中第一次出现 N 是在第几个数?

输入格式

输入一个整数 N。

输出格式

输出一个整数代表答案。

数据范围

对于 20% 的评测用例,1≤N≤10;

对于所有评测用例,1≤N≤109

输入样例:

6

输出样例:

13


思路

这道题如果想要得满分,需要一点小技巧,详细步骤:


fe1e0a4d97944865ae3459d3d3c53e4e.png(2)通过上图可以发现每个斜行从右上到左下都是递增的,并且每行从左到右也是递增的。故每个斜行的第一个元素一定是该元素出现的第一个位置,只要从最下面的那个斜行开始枚举,就能找到目标元素。


97c5dc279aab496d8e77b0e381af3419.png

(3)那么我们接下来要找到前多少个斜行能够包含到最大值 109,通过计算 C1734 要大于 109,并且 C1632 要小于 109 。所以我们只用从第 16 斜行开始往下枚举即可。


代码

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
LL n;
//求组合数
LL C(LL a, int b)
{
  LL res = 1;
  for (int i = a, j = 1; j <= b; i--, j++)
  {
    res = res * i / j;
    if (res > n)  return res;
  }
  return res;
}
bool check(int k)
{
  //下限是2*k,上限最差是n,当k=1时,C(n,1)=n
  LL l = 2 * k, r = max(n, l);
  while (l < r)
  {
    LL mid = l + r >> 1;
    if (C(mid, k) >= n) r = mid;
    else l = mid + 1;
  }
  if (C(r, k) != n) return false;
  //下标为r的位置前面有r+1行(等差公式得r*(r+1)/2)
  cout << (LL)r * (r + 1) / 2 + k + 1 << endl;
  return true;
}
int main()
{
  cin >> n;
  //从最大的斜行往前枚举
  for (int k = 16;; k--)
    if (check(k))
      break;
  return 0;
}


目录
相关文章
|
1月前
|
算法 测试技术 C++
【动态规划算法】蓝桥杯填充问题(C/C++)
【动态规划算法】蓝桥杯填充问题(C/C++)
|
1月前
|
人工智能 算法 BI
第十四届蓝桥杯省赛大学C组(C/C++)三国游戏
第十四届蓝桥杯省赛大学C组(C/C++)三国游戏
|
1月前
|
人工智能 C++
第十四届蓝桥杯省赛大学B组(C/C++)整数删除
第十四届蓝桥杯省赛大学B组(C/C++)整数删除
|
30天前
|
机器学习/深度学习 算法 关系型数据库
第十五届蓝桥杯C++B组省赛
第十五届蓝桥杯C++B组省赛
61 14
|
26天前
|
算法 C++
2022年第十三届蓝桥杯大赛C/C++语言B组省赛题解
2022年第十三届蓝桥杯大赛C/C++语言B组省赛题解
22 5
|
6月前
|
算法 测试技术 C++
小唐开始刷蓝桥(八)2013年第四届C/C++ B组蓝桥杯省赛真题
小唐开始刷蓝桥(八)2013年第四届C/C++ B组蓝桥杯省赛真题
|
6月前
|
算法 C++ 数据格式
小唐开始刷蓝桥(七)2014年第五届C/C++ B组蓝桥杯省赛真题
小唐开始刷蓝桥(七)2014年第五届C/C++ B组蓝桥杯省赛真题
|
6月前
|
算法 C++
小唐开始刷蓝桥(五)2016年第七届C/C++ B组蓝桥杯省赛真题
小唐开始刷蓝桥(五)2016年第七届C/C++ B组蓝桥杯省赛真题
|
6月前
|
算法 C++
小唐开始刷蓝桥(六)2015年第六届C/C++ B组蓝桥杯省赛真题
小唐开始刷蓝桥(六)2015年第六届C/C++ B组蓝桥杯省赛真题
|
6月前
|
机器学习/深度学习 存储 人工智能
小唐开始刷蓝桥(三)2018年第九届C/C++ B组蓝桥杯省赛真题
小唐开始刷蓝桥(三)2018年第九届C/C++ B组蓝桥杯省赛真题