1148: 组合三位数之一

时间:2023-02-22 16:13:09

1148: 组合三位数之一

Time Limit: 1 Sec   Memory Limit: 128 MB
Submit: 982   Solved: 665

Submit Status Web Board

Description

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

Input

Output

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

Sample Input

Sample Output

HINT

Source


#include<iostream>
using namespace std;
int main ()
{
int tem = 0 ;
int tval[3] = {0} ;
int a[21][3] = {0} ; //32-11=21
int n = 0 ;
int itest[9] = {0};

for (int i=11;i!=32;i++)
{
tem = i * i ;
for (int j=2;j>=0;j--) //反转使得个位数在数组的末位
{
tval[j]= tem % 10;
tem /=10;
}
if (tval[0]==tval[1] || tval[1]==tval[2] || tval[0]==tval[2])
continue; //满足if时继续执行两个for语句,直到检索出个、十、百位为不同的三位数
//不满足if时执行continue以下的语句
a[n][0] = tval[0];
a[n][1] = tval[1];
a[n][2] = tval[2];
n++; //不满足if的三位数的个数
}
/* for ( i=0 ; i!=n ; i++)
{
cout<<a[i][0]<<a[i][1]<<a[i][2]<<endl;
}
*/


//检索满足题意的三组数,从1,2,3,4,5,6,7,8,9中每个数只能使用一次
for (int k=0 ; k!= n-2 ; k++)
{

for (int t=k+1 ; t != n-1 ; t++)
{

for (int m=t+1 ; m != n; m++)
{

itest[ a[k][0] - 1 ] = 1;
itest[ a[k][1] - 1 ] = 1;
itest[ a[k][2] - 1 ] = 1;

itest[ a[t][0] - 1 ] = 1;
itest[ a[t][1] - 1 ] = 1;
itest[ a[t][2] - 1 ] = 1;

itest[ a[m][0] - 1 ] = 1;
itest[ a[m][1] - 1 ] = 1;
itest[ a[m][2] - 1 ] = 1;

for (int i=0;i<9;i++)
{
if (itest[i] != 1)//漏掉结果使得不等于一
break; //终止循环从头再来
if ( i==8 ) //循环到i==8,说明找到了满足题意的三组数
{
cout<<a[k][0]<<a[k][1]<<a[k][2]<<" "
<<a[t][0]<<a[t][1]<<a[t][2]<<" "
<<a[m][0]<<a[m][1]<<a[m][2]<<endl;
}
}
for (int j=0 ; j!=9 ; j++) //使得运行出来的所有结果个十百位属于1~9个数当中的三个
{
itest[j]=0; //运行出来的置为0
}

}
}
}
return 0;
}

#include<stdio.h>     //暴力法检索出所有的三位数#include<math.h>int a[100] ;#define N 10void  sanwei (){     int i,j,k;     for (i=1;i<N;i++)	 {	       int first=i;          for (j=1;j<N;j++)		  {		       if (j==i)				   continue;			   first*=10;			   first+=j;			   for (k=1;k<N;k++)			   {			        if (k==i || k==j)						continue;			         first*=10;					 first+=k;					 int it=(int)sqrt(first);					 if ( it*it==first )					 {						 printf("%d ",first);					 }					 first-=k;					 first/=10;			   }			   first-=j;                first/=10;		  }	 }}int main (){	sanwei();    return 0;}