1148: 组合三位数之一

来源:互联网 发布:哪里买高仿手表知乎 编辑:程序博客网 时间:2024/06/08 15:33

1148: 组合三位数之一

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

SubmitStatusWeb 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;}


原创粉丝点击