栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

蓝桥杯2021 AC 杨辉三角形【第十二届】【省赛】【B组】 C++

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

蓝桥杯2021 AC 杨辉三角形【第十二届】【省赛】【B组】 C++

这题的我的解题思路是参考的这个题主的大家可以先看一下
求杨辉三角中元素首次出现位置【2021蓝桥杯】
首先这题暴力题解肯定是有数据点过不了的,所以还是老老实实的用这个题主的算法吧。
在理解了,题主的算法的基础上,c++写起来有以下几个坑点绝对不是因为我菜

32 30的阶乘会超过long long 的数据范围,不能直接算阶乘用一次算一次,会超时,但 M == 1 时直接出答案,不然也会超时1要特判
就这么多吧 直接上代码

#include 
using namespace std;
long long n1, a = 16, x=0, k = 0;//k判断是否找到  a就是Cmn里面的n 就是第几斜
long long fac(int m){
    long long s=1,mn = m - a,z = 1;
    for(int i = m; i > a;i--){
        s *= i;
        while(z <= m-a){//防止数据范围超了
            s /= z++;
            break;
        }
    }
    return s;
}
int main(){
    cin>>n1;//输入的数
    if(n1 == 1){//特判
        cout<<1;
        return 0;
    }
    else{
    while(!k && a != 1){//找到n1直接跳出循环
        for(int i = 2 * a; ;i++){//从32开始循环 倒序
            if(i == 2 * a)//每次底变化算一次阶乘
                x = fac(i);
            else
                x = x*i/(i-a);//维护一个区间 减少计算
            if(x == n1){//找到了 跳出去
                k = i;
                break;
            }else if(x > n1){//这个斜里面没有 a--找下一个斜
                a--;
                break;
            }
        } 
    }
    }
    if(a == 1)//第一斜不特判有俩个数据点过不了
        cout< 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/702773.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号