测试你是否和LTC水平一样高-hdu-1407

测试你是否和LTC水平一样高

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 10505    Accepted Submission(s): 3413

Problem Description

大家提到LTC都佩服的不行,不过,如果竞赛只有这一个题目,我敢保证你和他绝对在一个水平线上!
你的任务是:
计算方程x^2+y^2+z^2= num的一个正整数解。

 

 

Input

输入数据包含多个测试实例,每个实例占一行,仅仅包含一个小于等于10000的正整数num。

 

 

Output

对于每组测试数据,请按照x,y,z递增的顺序输出它的一个最小正整数解,每个实例的输出占一行,题目保证所有测试数据都有解。

 

 

Sample Input

3

 

 

Sample Output

1 1 1

 

 

Author

lcy

解题思路:

  用三个for循环即可,但需要注意的是,题目要求的是正整数解,所以不能有0;

程序代码:

错误代码:

/*#include<stdio.h>

int main()

{

    int n,x,y,z,a[3][3]={0},i;

    while(scanf("%d",&n)!=EOF)

    {

     for(x=1,i=0;x<102;x++)

      for(y=1;y<102;y++)

       for(z=1;z<102;z++)

         if(x*x+y*y+z*z==n)

         {

         //printf("%d %d %d ",x,y,z);

          a[i][i]=x;a[i][i+1]=y;a[i][i+2]=z;i++;continue;

         }

         printf("%d %d %d ",a[0][0],a[0][1],a[0][2]);

    }

    return 0;

}*/

#include<stdio.h>

int main()

{

    int n,x,y,z,i;

    while(scanf("%d",&n)!=EOF)

    {

     i=0;

     for(x=1;x<102;x++)          //题目要求必须是正整数解,所以从 1 开始

      {

       for(y=1;y<102;y++)

       {

        for(z=1;z<102;z++)

         {

          if(x*x+y*y+z*z==n)        //判断是否满足方程

           {printf("%d %d %d ",x,y,z);i=1;}     //输出满足的第一组解,并且  把变量赋值 1

           if(i==1)

           break;                                    //已经找到第一组解,跳出循环

           }

           if(i==1)

           break;                                    //已经找到第一组解,跳出循环 

         }

         if(i==1)

           break;                                      //已经找到第一组解,跳出循环

        }

      }

      return 0;

}

原文地址:https://www.cnblogs.com/zhouhongweihpu/p/3226542.html