題目連結
題意:
字串長度為平方數時,先按由左到右,由上到下排列(形成n * n方陣)
接著以由上而下,由左而右的方式輸出
例如:
原字串 ABCDEFGHI
方陣的排法:
ABC
DEF
GHI
輸出:
ADGBEHCFI
解法:
先判斷字串長度是不是平方數
我取開平方根後的值是否為整數
如 5 的平方根為 2.2..,所以不為平方數
然後用 n * n方陣存字串的所有字元
輸入與輸出的 index 恰好是反向的
像上面的例子中,若B存在 [0][1]
輸出的順序則是[1][0]
將兩個 for loop 的 index 對調輸出即可
程式(Java):
題意:
字串長度為平方數時,先按由左到右,由上到下排列(形成n * n方陣)
接著以由上而下,由左而右的方式輸出
例如:
原字串 ABCDEFGHI
方陣的排法:
ABC
DEF
GHI
輸出:
ADGBEHCFI
解法:
先判斷字串長度是不是平方數
我取開平方根後的值是否為整數
如 5 的平方根為 2.2..,所以不為平方數
然後用 n * n方陣存字串的所有字元
輸入與輸出的 index 恰好是反向的
像上面的例子中,若B存在 [0][1]
輸出的順序則是[1][0]
將兩個 for loop 的 index 對調輸出即可
程式(Java):
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import java.util.*; | |
public class Main { | |
public static void main(String args[]) { | |
Scanner sc = new Scanner(System.in); | |
int T = Integer.parseInt(sc.nextLine()); | |
while (T-- > 0) { | |
String s = sc.nextLine(); | |
double root = Math.sqrt((double)s.length()); | |
if (root %1 != 0.0) | |
System.out.println("INVALID"); | |
else { | |
char matrix[][] = new char[(int)root][(int)root]; | |
for (int i = 0, z = 0; i < root; i++) | |
for (int j = 0; j < root; j++, z++) { | |
matrix[i][j] = s.charAt(z); | |
} | |
for (int i = 0; i < root; i++) | |
for (int j = 0; j < root; j++) { | |
System.out.print(matrix[j][i]); | |
} | |
System.out.println(); | |
} | |
} | |
} | |
} |
留言
張貼留言