zzulioj 1148 组合三位数之一

 终于写出来了,希望对你有帮助!

#include<stdio.h>
 int main()
 {
     int a[21][3];
     int i,j=0;
     int n=0,b,k;
     int t[3]={0};
     
     int zong[21];
     for(i=11;i<32;i++)
      {  b=i*i;
         t[0]=b%10;
         t[1]=b/10%10; 
         t[2]=b/100;
         if((t[0]-t[1])*(t[0]-t[2])*(t[1]-t[2])!=0&&t[0]!=0&&t[1]!=0)  //排除个位十位百位数字相同的情况,以及个位十位为0的情况 
         {
             a[j][0]=t[0];  /*将三位数依次存入数组a*/ 
             a[j][1]=t[1];
             a[j][2]=t[2];
             zong[j]=i*i;
              
             j++;
         }
         
     }
     for(i=0;i<j-2;i++)
     {
         for(b=i+1;b<j-1;b++)
         {  
             for(k=b+1;k<j;k++)
             {int  s[9]={0};
                 s[a[i][0]-1]=1;
                 s[a[i][1]-1]=1;  
                 s[a[i][2]-1]=1;
                 s[a[b][0]-1]=1;
                 s[a[b][1]-1]=1;
                 s[a[b][2]-1]=1;
                 s[a[k][0]-1]=1;
                 s[a[k][1]-1]=1;
                 s[a[k][2]-1]=1; //数组s中有九个元素,全部初始为0,
                                 //  数组a中的元素为1~9,而数组s的下标从0~8,所以数组a中的各个元素要-1*/ 
                 for(n=0;n<9;n++)
                 {
                     if(s[n]!=1)   
                    { 
                     
                     break;
                    }
                 }
                 if(n==9)  //判断是不是数组a的第i行,第b行和第k行中所有元素正好为 1~9
                 { 
                     t[0]=i;
                     t[1]=b;
                     t[2]=k;
                     break;
                 }
             
             }
             if(n==9)
             break;
             
         }
         if(n==9)
         break;
          
     }
      printf("\n%d %d %d",zong[t[0]],zong[t[1]],zong[t[2]]);
   return 0;
 }

猜你喜欢

转载自blog.csdn.net/m0_62055572/article/details/122153115
今日推荐