zoukankan      html  css  js  c++  java
  • HDU 4143 A Simple Problem(枚举)

    题目链接

    题意 : 就是给你一个数n,让你输出能够满足y^2 = n +x^2这个等式的最小的x值。

    思路 : 这个题大一的时候做过,但是不会,后来学长给讲了,然后昨天比赛的时候二师兄看了之后就敲了,我也想了一会儿才想起来,真是惭愧啊。。。。。

    其实就是将上边那个式子变一下:(y-x)*(y+x) = n ,然后接下来就去枚举(y-x)的值,因为手算了几组数据,发现当这个值越靠近√n时,x的值越小,其实看这个等式也可以看出来,所以枚举的时候从√n这里开始往下枚举就行,然后再看(y-x)+(y+x) = 2*y ,所以你枚举出这个(y-x)的值再用n除以(y-x)得到一个数,这两个数加起来得是2的倍数。

     1 //4143
     2 #include <iostream>
     3 #include <stdio.h>
     4 #include <string.h>
     5 #include <math.h>
     6 
     7 using namespace std;
     8 
     9 
    10 int main()
    11 {
    12     int  T ,n;
    13     scanf("%d",&T) ;
    14     while(T--)
    15     {
    16         scanf("%d",&n) ;
    17         int temp = sqrt(n) ,i;
    18         for(i = temp ; i >= 1 ; i--)
    19         {
    20             if(n % i == 0 && n/i != i && (n/i+i) % 2 == 0)
    21             {
    22                 printf("%d
    ",(n/i+i)/2-i) ;
    23                 break ;
    24             }
    25         }
    26         if(i == 0) printf("-1
    ") ;
    27     }
    28     return 0;
    29 }
    View Code
  • 相关阅读:
    初始化项目结构
    Django基础2
    Django基础
    Linux(9~)
    Linux(8~)
    redis案例
    Jedis连接池
    Jedis入门
    redis持久化
    redis命令操作
  • 原文地址:https://www.cnblogs.com/luyingfeng/p/3710594.html
Copyright © 2011-2022 走看看