1148: 组合三位数之一

时间:2023-02-22 16:17:57

1148: 组合三位数之一

时间限制: 1 Sec  内存限制: 128 MB
提交: 1110  解决: 755
[提交][状态][讨论版][命题人:admin]

题目描述

把1、2、3、4、5、6、7、8、9组合成3个3位数,要求每个数字仅使用一次,使每个3位数均为完全平方数。按从小到大的顺序输出这三个三位数。

输入

输出

按从小到大的顺序输出这三个三位数,由空格隔开。输出占一行。

 

#include<iostream>
#include<cstring>

using namespace std ; 

#define maxn 300 
int num[maxn] ; 
int total = 0 ; 

void init(){
    for(int i=1 ; i<maxn ; i++){
        if(100<=i*i && i*i <=1000){
            num[++total] = i*i ; 
        }
    }
}

bool check(int num1 , int num2, int num3 ){
    int visit[15] ;
    memset(visit , 0 , sizeof(visit)) ; 

    while(num1){
        visit[num1%10] = 1 ; 
        num1 /= 10 ;
    }
    while(num2){
        visit[num2%10] = 1 ; 
        num2 /= 10 ; 
    }
    while(num3){
        visit[num3%10] = 1 ; 
        num3 /= 10 ; 
    }
    bool flag = true ; 
    for(int i=1 ; i<10 ; i++){
        if(visit[i] == 0)
            flag = false ; 
    }
    return flag ; 
}

int main(){
    init() ; 

    for(int i=1 ; i<=total ; i++){
        for(int j=i+1 ; j<=total ; j++){

            for(int k=j+1 ; k<=total ; k++){
                if(check(num[i] , num[j] , num[k])){
                    cout<< num[i]<<" " << num[j]<<" "<<num[k]<<endl ; 
                }
            }
        }
    }

    return 0 ; 
}