【题意】给出n 和m , 输出 从1。。。n 的n个数字中 相加为m的子区间段
【思路】这里就是一个等差序列 用公式 sn=a1*n + (n-1)*n/2 已知sn枚举长度就可以算出 a1了 式子变形算出的a1是整数就可以直接输出结果了
在这里我貌似想多了 因为算出的结果是一个double型 直接强制类型转化为int型 要是 1.999999 不就转化为了 1 而不是2了 所以这里我又分了两种情况
考虑 但是提交上去时有一个地方写错了 使得没有进入第二个分支的情况 这样也ac了
难道这些都不用考虑的吗
记录几个函数的 用法 (虽然这里没用到)
(x)返回不小于x的最小整数值(然后转换为double型)。
(x)返回不大于x的最大整数值。
(x)返回x的四舍五入整数值。
1 #include2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 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 }