首页 > 其他 > 详细

hdu 2058

时间:2014-03-19 18:05:54      阅读:535      评论:0      收藏:0      [点我收藏+]

http://acm.hdu.edu.cn/showproblem.php?pid=2058

 

【题意】给出n 和m  , 输出 从1。。。n 的n个数字中  相加为m的子区间段

【思路】这里就是一个等差序列 用公式 sn=a1*n + (n-1)*n/2  已知sn枚举长度就可以算出 a1了 式子变形算出的a1是整数就可以直接输出结果了

 

在这里我貌似想多了 因为算出的结果是一个double型 直接强制类型转化为int型 要是 1.999999  不就转化为了 1 而不是2了 所以这里我又分了两种情况

考虑 但是提交上去时有一个地方写错了 使得没有进入第二个分支的情况 这样也ac了 

难道这些都不用考虑的吗

 

记录几个函数的 用法 (虽然这里没用到)

ceil(x)返回不小于x的最小整数值(然后转换为double型)。
floor(x)返回不大于x的最大整数值。
round(x)返回x的四舍五入整数值。
 
bubuko.com,布布扣
 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<vector>
 5 #include<math.h>
 6 #include<string>
 7 #include<queue>
 8 
                              // 
 9 int main()
10 {
11     int i,j,m,n;
12     while(scanf("%d%d",&n,&m)!=EOF)
13     {
14         if(m==0&&n==0)            //没有结束条件 超时一次 
15             break;
16         int t;
17         t=sqrt((double)(2*m));             //忘记强制类型转化为double ce一次          
                                            // 输出多余的测试数据wa 一次     桑心啊。。。。
18         for(i=t; i>=1; i--)
19         {
20             double temp=(double)(2*m+i-i*i)/(double)(2*i);
21             int temp1=temp;
22             if(fabs(temp-(double)temp1)<0.00001)
23             {
24                 if(temp1*i*2-i+i*i==2*m)
25                     printf("[%d,%d]\n",temp1,temp1+i-1);
26             }
27         }
28         printf("\n");
29     }
30     return 0;
31 }
bubuko.com,布布扣

hdu 2058,布布扣,bubuko.com

hdu 2058

原文:http://www.cnblogs.com/assult/p/3611727.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!