四川大学新生赛J分解质因数??

在这里插入图片描述

活生生把一道枚举题做成算法题
有时候不用太较真数据范围还可以接受的话就枚举试试
如果TLE
再考虑方法的问题
有些一眼看出来枚举就会TLE 的就不要浪费时间了
题目大意将一个数分解成abc的形式,要求c-a尽可能小并且a尽可能小
那就让a从最小的能整除的开始呗,开一个cmp变量用来更新c-a的值
如果变小就更新,并记录abc的值
好了思路就这样康康代码

#include<bits/stdc++.h>
using namespace std;
int main()
{
	int t,n,a,b,c,cmp;
	scanf("%d",&t);
	while(t--)
	{
		int cmp=99999;
		scanf("%d",&n);
		for(int i=2;i*i<n;i++)
		{
			if(n%i==0)
			{
				int m=n/i;
				for(int j=i;j*j<=m;j++)
				{
					if(m%j==0)
					{
						if(m/j-i<cmp)
						{
							a=i;
							b=j;
							c=m/j;
							cmp=c-a;	
						}	
					}
				}
			}
		}
		if(cmp==99999)
			printf("No solution\n");
		else
			printf("%d=%d*%d*%d\n",n,a,b,c);
	}
	return 0;
}

这个99999一开始我写的999wa了两次
吐血后来看见数据范围改的
其实可以用n

发布了54 篇原创文章 · 获赞 4 · 访问量 889

猜你喜欢

转载自blog.csdn.net/weixin_45460987/article/details/103430073