蓝桥杯货物摆放思路分析

该博客分析了蓝桥杯比赛中关于货物摆放的问题,将其转化为排列组合的计算题目,涉及长宽高(L、W、H)的分解、最简公约数寻找和排列组合优化算法。编程实现中使用long long int处理大数,并利用sqrt函数降低复杂度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

我们先来看看,这道题目关键点是由哪些部分组成的呢?

立方体的长宽高(L、W、H)

三维(即三方向)

以及n(n=LxWxH ,n即为容量)

最终求n条件下的摆放方案

重新理一下,这道题就可以重新理解为:

一个容量为2021041820210418的立方体有哪些“体型”,以及对应的“体型”有哪些不同的摆放方案?

这样分析,这就是一道通过“暴力”编程手段计算的排列组合题。而编程的思路可以寻溯到母题——“寻找素数”,找出给定n数据的最简公约数,同时进行不同组合(这里就用到排列组合的优化算法)。

编程思路

1.三个元素——即三边。

2.两个分解求公约数循环——即拆解LxWxH中两个乘号。

3.笔者在这次编程中采用long long int 声明n=2021041820210418以此来赋值初始化。超过1M的数据可以尝试考虑用全局声明。

4.排列组合优化部分:若a、b、c三者相等,为一种情况;a、b、c三个有两个相等,则独立的哪个有三种放法;a、b、c三个有两个相等,则独立的有三种放法;a、b、c三个有两个相等,则独立的哪个有三种放法。

5.a、b、c之间关系始终要a<=b<=c。(否则可能出现问题越界)

6.最好用sqrt函数降低复杂度,不然可能程序会跑很久!

具体编程如下:

#include <stdio.h>
#include <math.h>
long long int a=1,b=1,c=1,n1=1,n=2021041820210418,ans=0;
main()
{
 
    for(a=1;a<=sqrt(n);a++){
        if(n%a==0){
            n1=n/a;
            for(b=1;b<=sqrt(n1);b++){
                if(n1%b==0)
                {
                    c=n1/b;
                    if(c>=b&&b>=a){
                        if(a==b&&b==c){
                            ans++;
                        }
                        if(a!=b&&b==c){
                            ans+=3;
                        }
                        if(a==b&&b!=c){
                            ans+=3;
                        }
                        if(a!=b&&b!=c&&a!=c){
                            ans+=6;
                        }
     
                    }
                }
            }
        }
    }
    printf("%d",ans);
} 

参考文献:

[1]作者雪岩ding. 2021年第十二届蓝桥杯省赛B组(C/C++)个人题解[EB/OL]. [2021.8.23]. https://blog.youkuaiyun.com/timelessx_x/article/details/115836837.

[2]  作者xuanzo. 2021第十二届蓝桥杯C++B组省赛个人题解[EB/OL]. [2021.8.23]. https://blog.youkuaiyun.com/qq_33678357/article/details/115842711

评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

RonaldDong存档旧号,不再更新

非常感谢您对我的支持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值