2017年第八届蓝桥杯Java程序设计本科B组决赛个人题解汇总:
https://blog.csdn.net/daixinliangwyx/article/details/90184941
第一题
标题:平方十位数
由0~9这10个数字不重复、不遗漏,可以组成很多10位数字。
这其中也有很多恰好是平方数(是某个数的平方)。
比如:1026753849,就是其中最小的一个平方数。
请你找出其中最大的一个平方数是多少?
注意:你需要提交的是一个10位数字,不要填写任何多余内容。
解法:直接暴力用全排列函数来跑,不断更新平方数,等全排列跑完,则得到的平方数肯定是最大的。
代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main() {
ll num[10], maxn = 0;
for (ll i = 0; i < 10; i++)
num[i] = i;
do {
ll a = 0, tmp;
for(ll i = 0; i < 10; i++)
a = a * 10 + num[i];
tmp = sqrt(a);
if(tmp * tmp == a) maxn = a;
} while (next_permutation(num, num+10));
cout << maxn << endl;
return 0;
}