1. 程式人生 > >搭積木的訣竅

搭積木的訣竅

題目描述
小Q的程式設計技術在一次搭積木比賽中也成了祕密武器。原來,比賽的規則是這樣的:給你N個小木塊(全部為一樣大小的正方體),快速搭成如下圖規則的形狀(下圖為5層的規模),要求層數為最大限度。由於小Q編了個程式,只要輸入小木塊個數N,就可以馬上求出最多可以搭幾層,還剩幾個,所以小Q每次都是一次成功,從不需要翻工,速度也就領先了。你會編小Q這樣的程式嗎?
在這裡插入圖片描述

輸入
只有一個整數N,表示小木塊的個數,已知1≤N≤30000。

輸出
有兩行整數,第一行是最多可以堆的層數,第二行是剩餘的小木塊數。

樣例輸入
複製樣例資料
37
樣例輸出
5
2

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int n,ans,m,i,s=1;
    scanf("%d",&n);
    for(i=1;;i++)
    {
        n=n-s;
        m=n;
        s=s+i+1;
        if(n<0)
        {
            m=m+s-i-1;
            break;
        }
    }
    ans=i-1;
    printf("%d\n",ans);
    printf("%d\n",m);
    return 0;
}