0
点赞
收藏
分享

微信扫一扫

蓝桥杯 货物摆放 C++详解

夕阳孤草 2022-03-19 阅读 60

从题中就能知道是求三个因数

但是暴力搜索需要很多的时间,基本的思路就是搞清楚三个因数之间的关系以及排序问题

具体解释都在代码注释中

#include<iostream>
#include<algorithm>

using namespace std;

typedef long long ll;
const ll N = 2021041820210418; 

int main()
{
	ll number = 0; // 计数器 
	for(ll a = 1 ; a <= sqrt(N) ; a++) // 第一个数是a
		if(N%a == 0){ // 要求能够除尽 
			ll t = N/a ; // 第二第三个数的乘积是t
			for(ll b = 1 ; b <= sqrt(t) ; b++) // 第二个数是b 
				if(t%b == 0){
					ll c = t/b; // 第二个数是c
					if(c >= b && b >= a){ // 规定必须是递增序列,然后进行排列
						if(c != b && b != a) number += 6; // 三个数都不一样,全排列,一共6种情况 
						else if((c == b && b != a) || (c != b && b == a)) number += 3;// 三个数中有两个不一样,全排列,一共3种情况 
						else number++; // 三个数都一样,一种情况 
					}
				}	
		 } 
	cout << number; 
	return 0;
 } 

 最终答案:2430

举报

相关推荐

0 条评论