Test Message

d562: 山寨版磁力蜈蚣

內容

遊戲洛克人有一個 BOSS 叫做磁力蜈蚣。
現在山寨版磁力蜈蚣出現了,顯然設計得比本尊弱得很多:
它身上所有的節是由一個個附有數字的磁鐵所組成,
並且會暫時分解自己身上所有的節散落來攻擊玩家。
但是有一天它發現它身上的節居然隨著絕招的使用越來越少!

每次山寨版磁力蜈蚣將自己分解時,會讓所有磁鐵的排列順序倒轉。
例如原本是:1 2 3 4 5,那麼倒轉後便成了 5 4 3 2 1
但是現在每次分解前便會先遺失第一節磁鐵,
也就是原本:1 2 3 4 5,會遺失 1,
剩下的磁鐵倒轉後是 5 4 3 2
下次分解會遺失 5,剩下的倒轉成了 2 3 4
,再遺失 2,成了 4 3,最後剩下 3 便無法分解。

請利用程式來模擬這個過程。


輸入

共計三個測資點。
每組測資有兩行
第一行有整數 n(0<n<100)代表有幾個數,
第二行有 n 個數 A1…An(0<An<100)表示每個磁鐵上的數字

5
99 77 66 44 11
7
1 98 95 52 56 34 43

輸出

第一行請輸出最一開始的狀態
第二行開始,輸出「刪去第一項後,全部倒轉的結果」
直到數字只剩下一個為止

99 77 66 44 11
11 44 66 77
77 66 44
44 66
66

1 98 95 52 56 34 43
43 34 56 52 95 98
98 95 52 56 34
34 56 52 95
95 52 56
56 52
52


解題思路

用迴圈模擬題目敘述的流程即可。


完整程式碼

正常版

AC (0.3s, 116KB)
#include <stdio.h>

int main()
{
int n, list[100], s, e;
while (scanf(" %d", &n) == 1)
{
for (int i = 0; i < n; i++)
scanf(" %d", &list[i]);
s = 0, e = n - 1;
while (s <= e)
{
for (int i = e; i >= s; i--)
printf("%d ", list[i]);
putchar('\n');
e--;
for (int i = s; i <= e; i++)
printf("%d ", list[i]);
putchar('\n');
s++;
}
}
return 0;
}

輸出優化版

AC (0.1s, 100KB)
#include <stdio.h>

inline void putUInt(register unsigned int src, const char suffix)
{
register unsigned int div;
char buffer[12], * st = buffer + 10;
*st = suffix, * (st + 1) = 0;
do
{
*(--st) = src - ((div = src / 10) << 3) - (div << 1) + '0';
} while (src = div);
fputs(st, stdout);
}

int main()
{
int n, list[100], s, e;
while (scanf(" %d", &n) == 1)
{
for (int i = 0; i < n; i++)
scanf(" %d", &list[i]);
s = 0, e = n - 1;
while (s <= e)
{
for (int i = s; i <= e; i++)
putUInt(list[i], ' ');
putchar('\n');
s++;
for (int i = e; i >= s; i--)
putUInt(list[i], ' ');
putchar('\n');
e--;
}
}
return 0;
}