題目連結: 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;
        }
    }
}
更新於 閱讀次數

用實際行動犒賞爆肝的我😀

Zrn Ye LinePay

LinePay