蓝桥杯货物摆放思路分析

Posted RonaldDong

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了蓝桥杯货物摆放思路分析相关的知识,希望对你有一定的参考价值。

 

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

立方体的长宽高(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.csdn.net/timelessx_x/article/details/115836837.

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

以上是关于蓝桥杯货物摆放思路分析的主要内容,如果未能解决你的问题,请参考以下文章

蓝桥杯货物摆放思路分析

蓝桥杯每日真题之货物摆放

分解质因数算法案例——仓库货物摆放(蓝桥杯)

2021年软件类第十二届蓝桥杯 省赛 python组 A-E题解

2023年第十四届蓝桥杯将至来看看第十二届蓝桥杯javaB组题目如何

LQ0082 货物摆放因子+枚举