11.28 毛學姐大戰學渣
阿新 • • 發佈:2018-12-20
Description
又到了毛學姐屠殺學渣的時候了,學渣根據實力不同從 Lv1 依次向上提升,毛學姐每屠殺一個學渣就會不斷地提升自己的實力,從而挑戰更高等級的學渣,他按照這樣的方式屠殺學渣:1,1,2,1,1,1,3,1,1,1,1,4,1,1,1,1,1,5…1,1,2,1,1,1,3,1,1,1,1,4,1,1,1,1,1,5… 第一二天他屠殺2個Lv1的學渣,然後第三天能夠屠殺一個LV2的學渣,接下來,毛學姐再殺33個LV1的學渣【為了恢復體力】,然後殺死一個LV3的學渣,如此往復。但是毛學姐數學不好,殺著殺著就忘了今天該輪到等級多少的學渣了,請你幫他計算一下。
Input
有多組測試樣例。輸入一個正整數數N,代表要殺的第N個學渣。(0<N<100000)
Output
輸出第N個學渣的等級
思路:首先說一下最容易想到的思路,建一個長度100000的陣列,然後用迴圈給陣列賦值。但陣列長度太長,記憶體太大,程式碼如下;
#include <stdio.h> int main() { int l[100000]; long int n,b; int a=2; b=0; while(scanf("%ld",&n)!=EOF){ while(b<n){ int i; for(i=0;i<=a;i++){ l[b]=1; if(i==a){ l[b]=a; } b=b+1; } a=a+1; } printf("%d\n",l[n-1]); } return 0; }
以上程式碼記憶體太大,能得出結果但不可行,同樣的思路,直接去算這個數,假設1,1,2為一組,1113為一組,依此類,用N從3開始減,減到N小於等於0,確定N在哪組;如果減到最後為0,則為最後那個數,否則為1
#include <stdio.h> int main() { long int n; int a=2; int b=3; while(scanf("%ld",&n)!=EOF){ int a=2; int b=3; while(n>0){ n=n-b; a++; b++; } if(n==0){ printf("%d\n",a-1); }else{ printf("%d\n",1); } } return 0; }