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

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

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

题意:

求N在杨辉三角中最早出现的位置

分析:

1.分析这题我们得看斜行

2.由于对称性且要求最早出现,那么我们答案只可能出现在对称轴的左边

3.看第二斜行可得答案一定有解

4.因为N小于1e9,且C(32,16)<1e9,C(34,17)>1e9,所以N只可能在1~16斜行

5.要求N出现的最早位置,我们应该从第16斜行开始找,为啥嘞?因为如果在越后一斜行找到,那么N所在的列数就越小,为啥嘞?因为在它是在那个位置最大的数了,其他跟它同一行以及比它小行的数都比他小。

6.怎么判断N是否在枚举的那一行里嘞?由于每一斜行都是单调递增的,因此我们可以考虑二分,设当前斜行为第k,则这一行最小为第一个的值C(k,2k),右边界为C(k,n)(一定大于等于n)。

#include <iostream>
#include <algorithm>using namespace std;
typedef long long ll;int n;
//计算组合数,用ll,如果>n就退出,以防爆ll
ll C(int 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){int l=2*k,r=max(n,l);//r原本等于n,但为了特判n==1的情况,因为如果n==1,l就>r,就搞不出来了while(l<=r){int mid=(l+r)/2;if(C(mid,k)>n){r=mid-1;}else if(C(mid,k)<n){l=mid+1;}else{cout<<1ll*(mid+1)*mid/2+k+1;//将它转为ll,不然爆intreturn true;}}return false;
}
int main(){;cin>>n;
//从第16斜行开始找,找到就退出for(int i=16;;i--){if(check(i)){break;}}return 0;
} 

AcWing——杨辉三角相关推荐

  1. 蓝桥杯 杨辉三角(找规律)

    在杨辉三角中,有这样的规律:第i行j列(i,j从0开始)的数,等于C  且左右对称,即C(a, b) == C(a, a-b),由中间点向两边递减 每行中间点(每个斜行的开始点)的列数为行数的2倍,因 ...

  2. 用python实现杨辉三角的几种不同方式

    杨辉三角的概念 比较详细的知识可以看这里,在杨辉三角中,每个数是它左上方和右上方的数的和. 1/ \1 1/ \ / \1 2 1/ \ / \ / \1 3 3 1/ \ / \ / \ / \1 ...

  3. LeetCode简单题之杨辉三角 II

    题目 给定一个非负索引 rowIndex,返回「杨辉三角」的第 rowIndex 行. 在「杨辉三角」中,每个数是它左上方和右上方的数的和. 示例 1: 输入: rowIndex = 3 输出: [1 ...

  4. LeetCode简单题之杨辉三角

    题目 给定一个非负整数 numRows,生成「杨辉三角」的前 numRows 行. 在「杨辉三角」中,每个数是它左上方和右上方的数的和. 示例 1: 输入: numRows = 5 输出: [[1], ...

  5. 最详细的----->一维数组实现杨辉三角

    代码循环部分的解析在代码之后 先来看代码 #include<stdio.h> int arr[20]; int main() {arr[0] = 1;int n;scanf_s(" ...

  6. java利用递归画杨辉三角_用java程序编写杨辉三角形,初学者适用

    原创代码(非网上照搬复制,个人原创,真实有效): import java.util.Scanner; class demo1 { public static void main(String[] ar ...

  7. 【每日一算法】杨辉三角 II

    每日一算法-杨辉三角 II 题目 给定一个非负索引 k,其中 k ≤ 33,返回杨辉三角的第 k 行. 在杨辉三角中,每个数是它左上方和右上方的数的和. 示例: 输入: 3 输出: [1,3,3,1] ...

  8. 【每日一算法】杨辉三角到底是什么?

    每日一算法-杨辉三角 题目 给定一个非负整数 numRows,生成杨辉三角的前 numRows 行. 在杨辉三角中,每个数是它左上方和右上方的数的和. 示例: 输入: 5 输出:[     [1], ...

  9. 菲波那切数列php实现,php实现菲波那切数列和杨辉三角

    1.递归  显示斐波那契数列 function recursion($num){ //判断是否小于0 if($num<0){ return -1; } if($num==1){ return 0 ...

最新文章

  1. 在室内停车场使用道路标记语义进行厘米级建图和定位
  2. python【蓝桥杯vip练习题库】BASIC-18 矩形面积交(线段交)
  3. CTF 大小写字母转换 try lower and upper
  4. 数据结构与算法 / 字符串匹配算法汇总
  5. php与数据库的连接用法 (签到一)
  6. 性能测试:基础(2)
  7. 基于Go调用国密SM2算法
  8. icem合并面网格_ICEM CFD中合并多个网格
  9. php公众号模板在哪,微信公众号模板哪里找?公众号如何套用模板?
  10. 零基础入门学习Python4
  11. 手游推广加盟有哪些坑?
  12. 4、Shiro之IniRealm以及用户登录认证,角色认证,权限认证
  13. 1万条数据大概占多大空间_mysql亿级数据数据库优化方案测试-银行交易流水记录的查询...
  14. 单源最短路径 Dijkstra+优先队列
  15. gensim实战01——word2vec
  16. 计算机科学与技术前瞻教育总结,计算机科学与技术专业的研究状况及前瞻.doc...
  17. Codeforces 102202D-A Plus Equals B【思维】 难度:**
  18. Es6 之 const关键字
  19. 云图书馆登录入口_云图书馆登陆
  20. 5、电子邮件客户端程序设计与实现

热门文章

  1. UVM:7.5.1 期望值与镜像值
  2. JLINK的SWD解法
  3. 湿度检测仪输入示数计算机编程,温湿度传感器DHT11驱动程序 - 全文
  4. 腾讯数字孪生云白皮书发布(附下载)
  5. 关于隔离电源断电瞬间MOSFET损坏问题分析
  6. 大图中找小图(根据图片定位)
  7. 磁盘概述、磁盘缓存、虚拟内存及虚拟内存与内存的交换方式
  8. 安卓升级包的制作以及解析升级
  9. 基于php动漫周边商城管理系统(php毕业设计)
  10. c语言中的fbs和abs,防抱死制动系统(ABS)检测和诊断