hdu 2058

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的四舍五入整数值。
 
 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 }

 

posted @ 2014-03-19 16:30  galaxy77  阅读(175)  评论(0编辑  收藏  举报