數學類

小喵有很多女朋友。有一天,小喵想給女朋友們發玫瑰花。由於一些不(ni)知(dong)道(de)的原因,小喵想按照以下規律給它的已排好序的N個女朋友們發玫瑰花:給第一個女朋友發一支玫瑰花,給第二個女朋友發兩支,給第三個女朋友發三支…現在小喵想知道連續的幾個女朋友手中的玫瑰花總和爲M的所有可能,你能幫助小喵嗎?
Input輸入包含多組測試數據。每組測試數據包含兩個整數N,M( 1 <= N, M <= 1000000000)。 輸入以N=M=0結束。
Output對於每組例子,輸出連續的幾個女朋友手中的玫瑰花總和爲M的所有可能,以起始女朋友編號從小到大排序。
Sample Input
20 10
50 30
0 0
Sample Output
[1,4]
[10,10]

[4,8]
[6,9]
[9,11]
[30,30]


首先,判斷題目,如果爲數學問題,觀察能否對公式進行化簡,用一個量便是各個量的關係,化簡後進行循環。

#include<math.h>
#include<stdio.h>
#include<string.h>
int main()
{
    int n,m,i,j;
    while(~scanf("%d%d",&n,&m))
    {
        if(n==0&&m==0) break;
        else
        {
            for(j=(int)sqrt(2.0*m);j>0;j--)
            {
                i=(2*m/j+1-j)/2;
                if(((i+i+j-1)*j/2)==m) printf("[%d,%d]\n",i,i+j-1);
            }
        }
        printf("\n");
    }
    return 0;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章