码迷,mamicode.com
首页 > 其他好文 > 详细

HDU 4143 A Simple Problem(枚举)

时间:2014-05-06 09:49:33      阅读:291      评论:0      收藏:0      [点我收藏+]

标签:style   blog   class   code   java   tar   

题目链接

题意 : 就是给你一个数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的倍数。

bubuko.com,布布扣
bubuko.com,布布扣
 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",(n/i+i)/2-i) ;
23                 break ;
24             }
25         }
26         if(i == 0) printf("-1\n") ;
27     }
28     return 0;
29 }
View Code
bubuko.com,布布扣

 

HDU 4143 A Simple Problem(枚举),布布扣,bubuko.com

HDU 4143 A Simple Problem(枚举)

标签:style   blog   class   code   java   tar   

原文地址:http://www.cnblogs.com/luyingfeng/p/3710594.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!