蓝桥杯每日一题:杨辉三角形(组合计数)

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

QQ截图20210423150438.png

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

1, 1, 1, 1, 2, 1, 1, 3, 3, 1, 1, 4, 6, 4, 1, ...

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

输入格式

输入一个整数 N。

输出格式

输出一个整数代表答案。

数据范围

对于 20% 的评测用例,1≤N≤10;
对于所有评测用例,1≤N≤10^9。

输入样例:
6
输出样例:
13

 题解:

杨辉三角是对称形状,所以每次求左边数字的位置及是第一次的位置,

按斜行看杨辉三角第一斜行为1(全为1),第二斜行为23456……第三斜行为6,10,15……

每一斜行的第一个数是C(k,2k)后面的依次为C(k,2k+1……)

由于题目范围最大10^9所以k最多到16.

每次枚举每一斜行,从2k开始到n(最晚会在C(n,1)的时候访问到这个值,这之后就不可能再找得到这个值了)二分枚举判断C(k,mid)与n关系

参考代码:

#include<iostream>

using namespace std;

typedef long long LL;

int n;

LL C (int a,int b)
{
    LL res = 1;
    for(int i = a,j = 1;j<=b;j++,i--)
    {
        res = res*i/j;
        if(res>n) return res;//证明在这一斜行的数都是>n;
    }
    return res;
}

bool check(int k)
{//二分:
    LL l = 2*k, r = n;//每一斜行第一个数(也是最小数)都是C(k,2k),这里的check函数就是找到合适的“底数”,所以从2k开始寻找。
    if(l>r) return false;//特例:否则当n=1时,会出问题!
//注:当n=1时,k从16往下检查时,当k=1时,l=2k,r=n=1,因为l>r,会直接跳出二分的while循环
//C(r,k)=C(1,1)=1。根据C(1,1)得到的顺序值,此时就会输出1的位置是3,但是这个位置不是第一次出现的位置。正确的位置应该是(0,0)
    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;
    
    printf("%lld\n",r*(r+1)/2+k+1);//r前面有r行(横着,第一个单独1算第一行,k前面有k个数+1就是自己的位置)
    
    return true;
}

int main()
{
    scanf("%d",&n);
    
    for(int k = 16; ; k--)
        if(check(k)) 
          break;
    
    return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/523170.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Vue - 你能说说Vue3和Vue2相比,改进了哪些地方吗

难度级别:中级及以上 提问概率:85% Vue2终将面临停止维护,不过幸好Vue3做到了很好的向后兼容,可以使前端开发人员能够更平滑的过渡。在前端面试中,Vue3的相关知识也会越来越多,那么Vue3与Vue2相比,都做到了哪些改进呢? 从开发阶段讲…

VS Code远程连接服务器运行python程序

之前一直用pycharm连接服务器跑程序&#xff0c;pycharm需要本地和远程都存一份代码&#xff0c;然后把本地的更新同步到服务器上来实现代码修改&#xff0c;后来实习的时候发现企业里面都用VS Code&#xff0c;不得不说&#xff0c;VS Code真的很方便&#xff0c;直接连服务器…

Leetcode 56. 合并区间

心路历程&#xff1a; 这道题看起来很简单&#xff0c;但实际上操作起来很多细节&#xff0c;第一反应是朋友圈问题&#xff0c;于是想到了并查集去做&#xff0c;顺便复习了一下并查集。但是这道题用并查集的话只能98% A&#xff0c;无法全部通过。 这道题其实是考察数组重复…

如何使用 FastApi

安装 fastapi fastapi 是一个用于构建高性能 Web 应用的 Python 框架&#xff0c;它提供了简洁、高效的 API 开发体验。 pip install fastapi 安装 uvicorn uvicorn 是一个用于运行 FastAPI 应用的服务器&#xff0c;它可以将你的 FastAPI 代码部署到生产环境中。 pip inst…

MySQL基础【语句执行顺序】

一个SQL语句它的执行顺序对于我们思考题意有着很重要的关系 题意就是&#xff1a;找出哪些只逛超市不买单的人&#xff08;买单0元也算哦&#xff0c;可能是使用的是代金券吧&#xff09; 看到此题关键找出两个数据 参观过的人 和 买单的人 他们的差就是白嫖的人&#xff08;支…

【简单讲解想如何安装MXNet】

&#x1f3a5;博主&#xff1a;程序员不想YY啊 &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 ✨希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出…

C语言解决汉诺塔问题

背景 首先带大家了解一下汉诺塔问题 汉诺塔是一个典型的函数递归问题&#xff0c;汉诺塔描述了这样的场景&#xff0c;有三个柱子&#xff0c;A,B,C&#xff0c;A柱为起始柱&#xff0c;在A柱上面有若干大小不同的盘子&#xff0c;最下面的最大&#xff0c;最上面的最小&#x…

【教程】VOC数据集制作

语义分割任务中VOC数据集的制作&#xff0c;任务中只有一种标签&#xff1a;gas 文章目录 1、由黑白图像识别为txt标签2、txt转json3、数据集转VOC格式 1、由黑白图像识别为txt标签 由于使用CycleGAN网络进行风格迁移学习&#xff0c;生成了大量伪标签图像&#xff0c;因此需…

Python基于深度学习的屋内烟雾检测系统的研究与实现,附源码

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…

实现Hello Qt 程序

&#x1f40c;博主主页&#xff1a;&#x1f40c;​倔强的大蜗牛&#x1f40c;​ &#x1f4da;专栏分类&#xff1a;QT❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 目录 一、使用 "按钮" 实现 1、纯代码方式实现 2、可视化操作实现 &#xff08;1&#xff09…

计算机网络基础(二)

之前我们讲到了计算机网络的分类&#xff0c;现在我们继续讲解&#xff1a; 一.按网络的线路结构进行分类 1.星型 如上图&#xff0c;星型型拓扑结构是目前局域网普遍采用的一种拓扑结构。 特点&#xff1a; 星型拓扑结构是用一个节点作为中心节点&#xff0c;其他节点直接与…

常见的线程安全类

线程安全&#xff01;线程安全&#xff01;&#xff01;线程安全&#xff01;&#xff01;&#xff01; 鼠鼠我最近被线程安全这个词弄得好烦啊&#xff0c;那既然如此就来写一篇常见的线程安全类防止以后鼠鼠我的大脑又宕机了忘记了....... 这里我们讨论的线程安全的是指&am…

【C#】版本号

&#x1f4bb; 代码 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;namespace ConsoleApp16 {internal class Program{static void Main(string[] args){Version version01 new Version("4.0.0…

软件设计师-基础知识科目-计算机基础知识1

前言&#xff1a; 我去年11月份参加了软件设计师的考试&#xff0c;一次性顺利通过了该考试。去年11月份的考试首次改革成机考。考试时间上从一整天压缩成一个下午。考试难度无法评价&#xff0c;因为是第一次参加该考试。我考前利用4个月时间准备&#xff0c;准备时间看似很长…

Word wrap在计算机代表的含义(自动换行)

“Word wrap”是一个计算机术语&#xff0c;用于描述文本处理器在内容超过容器边界时自动将超出部分转移到下一行的功能。在多种编程语言和文本编辑工具中&#xff0c;都有实现这一功能的函数或选项。 在编程中&#xff0c;例如某些编程语言中的wordwrap函数&#xff0c;能够按…

检查网站连接是否安全

要确认某个网站是否可以安全地进行访问&#xff0c;您可以查看有关该网站的安全信息。如果您无法安全地或以私密方式访问网站&#xff0c;浏览器将会发出提醒。 1. 在 浏览器 中&#xff0c;打开相应网页。 2.要确认网站的安全性&#xff0c;请查看网址左侧显示的安全状态图标…

学习:面向云备份提供商的 Solidigm 固态硬盘

SSD与HDD的区别 SSD和HDD之间的主要区别在于它们如何存储和传输数据。HDD有一个旋转盘片或磁盘&#xff0c;用于读取和写入数据。HDD的每GB初始价格通常低于SSD&#xff0c;这使其成为大型机构&#xff08;如金融机构、政府数据存储设施、高性能计算中心&#xff08;HPC&#…

ERC314协议代币开发及合约开发详解

ERC314 是一种新的代币标准&#xff0c;旨在为 BASE 链上的代币提供更便捷、高效的交易体验。它由 DAPJ 项目团队开发&#xff0c;并于 2023 年 8 月首次发布。 ERC314 的特点 无需依赖 DEX 或 SWAP 进行交易: ERC314 代币可以像原生代币一样直接转账&#xff0c;无需借助 DEX …

[mmu/cache]-MMU的地址翻译(Address translation)指令介绍

快速链接: 【精选】ARMv8/ARMv9架构入门到精通-[目录] &#x1f448;&#x1f448;&#x1f448; Address translation system instructions AT指令的语法格式&#xff1a; 有了上面的语法格式后&#xff0c;就非常好理解armv8的MMU提供了14条AT指令了&#xff1a; MMU的地址…

【编译原理】手工打造语法分析器

重点&#xff1a; 语法分析的原理递归下降算法&#xff08;Recursive Descent Parsing&#xff09;上下文无关文法&#xff08;Context-free Grammar&#xff0c;CFG&#xff09; 关键点&#xff1a; 左递归问题深度遍历求值 - 后续遍历 上一篇「词法分析器」将字符串拆分为…