首页 > ACM题库 > HDU-杭电 > HDU 1407 测试你是否和LTC水平一样高-枚举-[解题报告] C++
2013
12-09

HDU 1407 测试你是否和LTC水平一样高-枚举-[解题报告] C++

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

问题描述 :

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

输入:

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

输出:

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

样例输入:

3

样例输出:

1 1 1

题目简介:
i*i+j*j+k*k==num  找出i j k 使之成立    最小字典序输出
 
 #include<iostream>
 using namespace std;

 int num;

 int main()
 {
     while(cin>>num)
    {

     for(int i=1;i<=100;i++)
     {
         if(i*i>num) continue;
         for(int j=1;j<=100;j++)
         {
             if(i*i+j*j>num)  continue;
             for(int k=1;k<=100;k++)
             {
                if(i*i+j*j+k*k==num)  {cout<<i<<" "<<j<<" "<<k<<endl;goto AAA;}
             }
         }

     }
     AAA:;
    }
     return 0;
 }

解题报告转自:http://blog.csdn.net/i_iphone/article/details/8780286


  1. #include <cstdio>

    int main() {
    //answer must be odd
    int n, u, d;
    while(scanf("%d%d%d",&n,&u,&d)==3 && n>0) {
    if(n<=u) { puts("1"); continue; }
    n-=u; u-=d; n+=u-1; n/=u;
    n<<=1, ++n;
    printf("%dn",n);
    }
    return 0;
    }

  2. 其实国内大部分公司对算法都不够重视。特别是中小型公司老板根本都不懂技术,也不懂什么是算法,从而也不要求程序员懂什么算法,做程序从来不考虑性能问题,只要页面能显示出来就是好程序,这是国内的现状,很无奈。

  3. 在方法1里面:

    //遍历所有的边,计算入度
    for(int i=0; i<V; i++)
    {
    degree = 0;
    for (j = adj .begin(); j != adj .end(); ++j)
    {
    degree[*j]++;
    }
    }

    为什么每遍历一条链表,要首先将每个链表头的顶点的入度置为0呢?
    比如顶点5,若在顶点1、2、3、4的链表中出现过顶点5,那么要增加顶点5的入度,但是在遍历顶点5的链表时,又将顶点5的入度置为0了,那之前的从顶点1234到顶点5的边不是都没了吗?