题解 P6354 【[COCI2007-2008#3] TAJNA】
囧仙
2020-04-12 13:02:05
这里介绍用 C++ STL 中的 string 类型,头文件 `string` / `cstring`。
首先输入密文 $s$,$s$ 是一个 string 类型,要用 `iostream` 库中 `cin>>s` 输入流输入。
长度 $l$ 用 `cstring` 库中的 `.size()` 函数计算,因为要使 $r$ 尽可能大,则让 $r$ 从 $\sqrt{l}$ 开始,依次减一,直到 $l\bmod r=0$ 为止,这时,$c=\dfrac{l}{r}$。
使用数组 $a_{i,j}$ 存储矩阵,存储代码如下:
```cpp
for(int i=1;i<=c;i++)
for(int j=1;j<=r;j++)
a[j][i]=s[tmp],tmp=tmp+1;//注意是a[j][i],tmp要+1
```
然后输出即可,完整代码:
```cpp
#include <iostream>
#include <cstring>
#include <cmath>
#include <cstdio>
using namespace std;
string s;
int r,c;
char a[110][110];
int main(){
cin>>s;
int l=s.size();
for(int i=sqrt(l);i>0;i--){
if(l%i==0){r=i;c=l/i;break;}
}
int tmp=0;
for(int i=0;i<c;i++)
for(int j=0;j<r;j++)
a[j][i]=s[tmp],tmp=tmp+1;
for(int i=0;i<r;i++)//输出
for(int j=0;j<c;j++)
cout<<a[i][j];
return 0;
}
```