題目連結: https://zerojudge.tw/ShowProblem?problemid=d671
# 內容
題目給你一個密文,你要用下述的解碼方式來解碼。請把這些字元以「列優先」的方式置入一個 n ´ n (本例為 4 ´ 4) 的格子。當我們以「行優先」 的方式將上面格子的字元取出便可以得到以下的明文
若密文長度不是完全平方數,則輸出 INVALID
# 解題思路
列優先轉為行優先的方式為 行數 * 個數 + 列數
記得 cin.ignore () 把數字後的換行字元讀掉
# 程式碼
#include <iostream> | |
using namespace std; | |
int main() { | |
int t; | |
while(cin>>t){ | |
cin.ignore(); | |
string s; | |
for(int i=0;i<t;i++){ | |
getline(cin,s); | |
if(s.length()==1){ | |
cout<<s<<endl; | |
continue; | |
} | |
bool pow=false; | |
int root; | |
for(int j=1;j<=s.length()/2;j++){ | |
if(j*j==s.length()){ | |
root=j; | |
pow=true; | |
break; | |
} | |
} | |
if(pow){ | |
for(int j=0;j<root;j++) | |
for(int k=0;k<root;k++) | |
cout<<s[ root*k + j ]; | |
cout<<endl; | |
} | |
else | |
cout<<"INVALID"<<endl; | |
} | |
} | |
} |