【金色十月線上編程比賽規則】
一個小女孩正在用左手手指數數,從1數到n。她從拇指算作1開始數起,然後,食指為2,中指為3,無名指為4,小指為5。接下來調轉方向,無名指算作6,中指為7,食指為8,大拇指為9,如此反復。問最後會停在那個手指上?用編號1、2、3、4、5依次表示大拇指、食指、中指、無名指、小指。
輸入格式:
輸入多組數據。每組數據占一行,只包含一個整數n(1<=n<=1000000000)。
輸出格式:
每組數據占一行,只包含一個介於1和5之間的整數,表示最後停留的手指。
輸入樣例:
1
10
1000000000
輸出樣例:
1
2
2
解題思路:我們可以先觀察下
1 2 3 4 5
9 8 7 6
10 11 12 13
17 16 15 14
18 19 20 21
25 24 23 22
。。。
我們發現第n行的最大值為5+4*(n-1),當n為偶數時,最大值在最右邊,n為奇數時,最大值在最左邊,於是我們只需要找到給定的數a在第幾行,然後從這個最大值一直減小到a,看看它在那個位置;
#includeusing namespace std; int main(){ long long n; while (cin>>n){ double k=(n-5)*1.0/4+1; double s=k-(int)k; long long num=k; if (s) num++; long long a=5+4*(num-1); int answer=0; if (a>n) answer=a-n; else answer=n-a; if (num%2==0) answer+=1; else answer=5-answer; cout<