AcWing——杨辉三角
下面的图形是著名的杨辉三角形:
如果我们按从上到下、从左到右的顺序把所有数排成一列,可以得到如下数列:
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——杨辉三角相关推荐
- 蓝桥杯 杨辉三角(找规律)
在杨辉三角中,有这样的规律:第i行j列(i,j从0开始)的数,等于C 且左右对称,即C(a, b) == C(a, a-b),由中间点向两边递减 每行中间点(每个斜行的开始点)的列数为行数的2倍,因 ...
- 用python实现杨辉三角的几种不同方式
杨辉三角的概念 比较详细的知识可以看这里,在杨辉三角中,每个数是它左上方和右上方的数的和. 1/ \1 1/ \ / \1 2 1/ \ / \ / \1 3 3 1/ \ / \ / \ / \1 ...
- LeetCode简单题之杨辉三角 II
题目 给定一个非负索引 rowIndex,返回「杨辉三角」的第 rowIndex 行. 在「杨辉三角」中,每个数是它左上方和右上方的数的和. 示例 1: 输入: rowIndex = 3 输出: [1 ...
- LeetCode简单题之杨辉三角
题目 给定一个非负整数 numRows,生成「杨辉三角」的前 numRows 行. 在「杨辉三角」中,每个数是它左上方和右上方的数的和. 示例 1: 输入: numRows = 5 输出: [[1], ...
- 最详细的----->一维数组实现杨辉三角
代码循环部分的解析在代码之后 先来看代码 #include<stdio.h> int arr[20]; int main() {arr[0] = 1;int n;scanf_s(" ...
- java利用递归画杨辉三角_用java程序编写杨辉三角形,初学者适用
原创代码(非网上照搬复制,个人原创,真实有效): import java.util.Scanner; class demo1 { public static void main(String[] ar ...
- 【每日一算法】杨辉三角 II
每日一算法-杨辉三角 II 题目 给定一个非负索引 k,其中 k ≤ 33,返回杨辉三角的第 k 行. 在杨辉三角中,每个数是它左上方和右上方的数的和. 示例: 输入: 3 输出: [1,3,3,1] ...
- 【每日一算法】杨辉三角到底是什么?
每日一算法-杨辉三角 题目 给定一个非负整数 numRows,生成杨辉三角的前 numRows 行. 在杨辉三角中,每个数是它左上方和右上方的数的和. 示例: 输入: 5 输出:[ [1], ...
- 菲波那切数列php实现,php实现菲波那切数列和杨辉三角
1.递归 显示斐波那契数列 function recursion($num){ //判断是否小于0 if($num<0){ return -1; } if($num==1){ return 0 ...
最新文章
- 在室内停车场使用道路标记语义进行厘米级建图和定位
- python【蓝桥杯vip练习题库】BASIC-18 矩形面积交(线段交)
- CTF 大小写字母转换 try lower and upper
- 数据结构与算法 / 字符串匹配算法汇总
- php与数据库的连接用法 (签到一)
- 性能测试:基础(2)
- 基于Go调用国密SM2算法
- icem合并面网格_ICEM CFD中合并多个网格
- php公众号模板在哪,微信公众号模板哪里找?公众号如何套用模板?
- 零基础入门学习Python4
- 手游推广加盟有哪些坑?
- 4、Shiro之IniRealm以及用户登录认证,角色认证,权限认证
- 1万条数据大概占多大空间_mysql亿级数据数据库优化方案测试-银行交易流水记录的查询...
- 单源最短路径 Dijkstra+优先队列
- gensim实战01——word2vec
- 计算机科学与技术前瞻教育总结,计算机科学与技术专业的研究状况及前瞻.doc...
- Codeforces 102202D-A Plus Equals B【思维】 难度:**
- Es6 之 const关键字
- 云图书馆登录入口_云图书馆登陆
- 5、电子邮件客户端程序设计与实现