2010年5月8日 星期六

Problem 11716 Digital Fortress,陣列轉向列印

給你一串字串,請你先判斷他是否能成為一個 n * n 的陣列,若不行,印出"INVALID";若可以,就由上到下,一列一列的印出。

例如:abcdefghijklmnop,看成 n * n 陣列後為:
a b c d
e f g h
i j k l
m n o p

印出時則由上到下印出,為:aeimbfjncgkodhlp。
首先當讀入一字串時,須先判斷它的長度是否合乎 n * n 的陣列,所以先把它的長度開根號在平方回來,視它是否為同一數,若是則合乎。最後只須以它長度開根號後的長度為間隔,依序印出即可,C 語言程式碼如下:
gets(str);
int len = strlen(str);
int sqrtLen = (int)sqrt(len);
if (sqrtLen * sqrtLen != len)
printf("INVALID\n");
else
{
int i, j;
for (i = 0; i < sqrtLen; i ++)
for (j = i; j < len; j += sqrtLen)
printf("%c", str[j]);
printf("\n");
}

By David.K

p11716題目連結
回ACM題庫目錄
回首頁

沒有留言: