1150: 组合三位数之一(函数专题)
时间限制: 1 Sec 内存限制: 128 MB
提交: 106 解决: 68
[提交][状态][讨论版]
题目描述
把1、2、3、4、5、6、7、8、9组合成3个3位数,要求每个数字仅使用一次,使每个3位数均为完全平方数。按从小到大的顺序输出这三个三位数。
输入
无
输出
按从小到大的顺序输出这三个三位数,由空格隔开。输出占一行。
样例输入
样例输出
枚举答案+判断
#include<bits/stdc++.h>
using namespace std;
#define sz(v) ((int)v.size())
#define N 10
vector<int>a;
bool judge(int i,int j,int k){
vector<int>vis(N,0);
int x=a[i];
while(x){
int t=x%10;
x/=10;
vis[t]++;
}
x=a[j];
while(x){
int t=x%10;
x/=10;
vis[t]++;
}
x=a[k];
while(x){
int t=x%10;
x/=10;
vis[t]++;
}
for(int i=1;i<N;++i){
if(vis[i]!=1) return 0;
}
return 1;
}
void get_num()
{
int i,j,k,cnt=0;
for(i=1; i<N; i++)
{
for(j=1; j<N; j++)
{
if(j==i) continue;
for(k=1; k<N; k++)
{
if(k==i||k==j) continue;
int t=i*100+j*10+k;
int v=sqrt(t);
if(v*v==t)
{
a.push_back(t);
}
}
}
}
}
int main()
{
get_num();
sort(a.begin(),a.end());
for(int i=0;i<sz(a);++i){
for(int j=i+1;j<sz(a);++j){
for(int k=j+1;k<sz(a);++k){
if(judge(i,j,k)){
cout<<a[i]<<' '<<a[j]<<' '<<a[k]<<endl;
return 0;
}
}
}
}
return 0;
}