2016蓝桥杯国赛凑平方数题解

蓝桥杯凑平方数题解


1.题目:
把0~9这10个数字,分成多个组,每个组恰好是一个平方数,这是能够办到的。
比如:0, 36, 5948721
再比如:
1098524736
1, 25, 6390784
0, 4, 289, 15376
等等…

2.思路:
9876543210是能凑的最大数,所以将其开根得到一个数m。从0-m找到所有无重复位的数,并将其转化成string,记录下来。
之后利用递归思想,把组合数和为一个字符串,用判重函数check检验是否成立,记录答案即可。(ps:做这个题一定要细心,我就是因为不细心错了好多回 ToT )
3.c++代码

#include
using namespace std;
#define MAX 9876543210
#define ll long long
string t[99380];//存所有无重复位的平方数
ll k=0;
int ans=0;
int check(string n)//检验是否有重复
{
    ll co[10]={0};
	int j=0,tt;
	int count=0;
	fill(co,co+10,0);
	for(j=0;j1)return 0;//有重复返回0
	}	
	return count;//无重复返回位数
}
void fun(string n,int j)
{
	int i;
	if(!check(n))return ;	
	if(check(n)==10)//
	{
		ans++;
		cout<=0;i--)
	{
		t2+=t1[i];
	}
	return t2;
	
}
int main()
{	
	ll i,j;
	ll d=993800;
	cout<

你可能感兴趣的:(蓝桥杯赛前总结)