当前位置:   article > 正文

【蓝桥杯】试题 历届真题 杨辉三角形【第十二届】【省赛】【研究生组】c++实现_蓝桥杯杨辉三角形真题c++

蓝桥杯杨辉三角形真题c++

题目如下:

题目分析:

这道题的关键是找到一个策略来找到目标数字的所在行列

不难发现数字6先出现在第五行的中心,再出现在第七行的第二位
考虑到以下两点:
  1. 每一行是对称的
  1. 每一行从外面到中间数值变大
因此,有:
  1. 将每一行折半分析,不考虑右半边,减小问题规模
  1. 假设一个数值多次出现,一定有如下出现规律(如图):
  • 首次出现所在行最小,以后每次出现的所在行一定小于上次出现的所在行
  • 每次出现所在斜列一定在上一次出现所在斜列的左侧
(因为每次出现所在斜列的下方数字一定有该数字的加法因子)
由此,可以确定寻找的顺序:
  1. 首先按斜列寻找,从右侧的斜列向左侧的斜列寻找
  1. 然后在同一斜列内按从上到下的顺序寻找

(超链接)请看看这位大佬的图解,不然不好理解

代码实现(含注释):

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. #define ll long long
  4. ll n;
  5. //二分查找的底部
  6. //去除全是1的斜列,从左往右数起第i个斜列有:
  7. //c(buttom[i],i)<=10e9<c(buttom[i]+1,i)
  8. //写个别的程序跑一遍即可得
  9. ll buttom[17]={ 0,1000000000,44722,1819,
  10.                 396,167,98,69,
  11.                 54,46,41,38,
  12.                 36,35,34,33,33};
  13. //计算组合数c(a,b),a是下标,b是上标
  14. ll c(ll a,ll b){
  15. ll sum=1;
  16. for(ll i=a,j=1;j<=b;++j,--i){
  17. sum=sum*i/j;
  18. if(sum>n)break;
  19. }
  20. return sum;
  21. }
  22. //计算h行第l个数排在第几个
  23. ll find(ll h,ll l){
  24. return (1+h)*h/2+l;
  25. }
  26. int main(){
  27. cin>>n;
  28. ll ans=0;
  29.     //第16斜列有:
  30.     //c(32,16)<10e9<c(33,16)
  31.     //可以提前处理
  32. if(n==1)ans=1;
  33. else if(n==601080390)ans=c(32,16);
  34. else{
  35.         //遍历15个斜列
  36. for(ll i=15;i>=1;--i){
  37.             //二分查找即可
  38.             //我的查找写的好烂。。。
  39. ll u=2*i;
  40. ll d=buttom[i];
  41. ll m=u+d>>1;
  42. while((d-u)>=2){
  43. if(c(m,i)<=n)u=m;
  44. else d=m;
  45. m=u+d>>1;
  46. }
  47. if(c(u,i)==n){
  48. ans=find(u,i+1);
  49. //cout<<u+1<<' '<<i+1<<endl;
  50. break;
  51. }
  52. if(c(d,i)==n){
  53. ans=find(d,i+1);
  54. //cout<<d+1<<' '<<i+1<<endl;
  55. break;
  56. }
  57. if(c(m,i)==n){
  58. ans=find(m,i+1);
  59. //cout<<m+1<<' '<<i+1<<endl;
  60. break;
  61. }
  62.             //二分查找结束,进入下一斜列
  63. }
  64. }
  65. cout<<ans;
  66. return 0;
  67. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/秋刀鱼在做梦/article/detail/946153
推荐阅读
相关标签
  

闽ICP备14008679号