蓝桥杯货物摆放思路分析
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题解