POJ 2912 三个完全平方数 解题报告

POJ 2912 三个完全平方数 解题报告

编号: 2912

考查点:三重循环、简单数学

思路: 先找出三个完全平方数,然后结果基本就出来了。

提交情况: 没弄明白题WA了几次,后面直接AC了,BT版几行代码即可.

Source Code

#include <iostream>

using namespace std;

 

/* 变态版

int main()

{

   int max;cin>>max;

   max>784? cout<<"361 529 784": max>529? cout<<"361 529" : cout<<"361";

}

*/

 

bool X(int a,int b)

{

   char cha[4] = {0};

   char chb[4] = {0};

   sprintf(cha,"%d",a);

   sprintf(chb,"%d",b);

   for (int i=0;i<3;i++)

   {

      for (int j=0;j<3;j++)

      {

        if (cha[i] == chb[j])

        {

           return false;

        }

      }

   }

 

   return true;

}

 

int main()

{

   int MAX;cin>>MAX;

   int num[100] = {0};

   char ch[4] = {0};

   for (int i=12;i<32;i++)

   {

      num[i] = i*i;

      int m,n,s;

      m = num[i]%10;

      n = (num[i]/10)%10;

      s = (num[i]/100)%10;

      if (m==n || m==s || n==s)

      {

        num[i] = 0;

      }

   }

 

   bool bflag = false;

   for (int i=12;i<32;i++)

   {

      if (num[i])

      {

        for (int j=i+1;j<32;j++)

        {

           if (num[j] && X(num[i],num[j]))

           {

              for (int k=j+1;k<32;k++)

              {

                 if (num[k] && X(num[i],num[k]) && X(num[j],num[k]))

                 {

                    if (MAX>num[k])

                    {

                      cout<<num[i]<<" "<<num[j]<<" "<<num[k];

                    }

                    else if (MAX>num[j])

                    {

                      cout<<num[i]<<" "<<num[j];

                    }

                    else

                    {

                      cout<<num[i];

                    }

                    goto _label;

                 }

 

              }

           }

        }

      }

   }

_label:

   return 0;

}

 

总结: 水题,感觉出题也不严谨。

 

                                                       By   Ns517

                                                      Time 09.11.21

posted @ 2009-11-21 19:19  端木  阅读(617)  评论(0编辑  收藏  举报