For example, given the original message ‘iloveyouJack’, the message length is L = 12. Thus the padded message is ‘iloveyouJack****’, with length M = 16. Below are the two tables before and after rotation.

2
iloveyoutooJill
TheContestisOver
iteiloylloooJuv OsoTvtnheiterseC
解题心得:
题意是输入字符串(长度L),然后将每个字符从上到下,从左到右挨着放到一个k*k的方格里,剩余的用*补上,然后将方格顺时针旋转一下(90度),然后在按照从上到下,从左到右的顺序输出(*省略掉)。K值:先把L开方,然后向上取整再加1,然后平方,即得到K的值。
我在做的时候忘记了把X清零,结果又是浪费了时间。。。
代码:
1 #include <iostream> 2 #include <cstring> 3 #include <cstdio> 4 #include <cmath> 5 6 using namespace std; 7 8 int main() 9 { 10 int n; 11 int x=0; 12 int size=0; 13 double k=0; 14 int k1=0; 15 int s; 16 char a[10000]; 17 char c[100][100]; 18 scanf("%d",&n); 19 for(int i=0;i<n;i++){ 20 cin>>a; 21 size=strlen(a); 22 k=sqrt(size); 23 k1=ceil(k); 24 s=k1*k1; 25 if(size!=s){ 26 int add=s-size; 27 for(int i1=0;i1<add;i1++){ 28 a[size+i1]=‘*‘; 29 } 30 a[size+add]=‘\n‘; 31 } 32 for(int j=0;j<k1;j++){ 33 for(int j1=0;j1<k1;j1++){ 34 c[j][j1]=a[x++]; 35 } 36 } 37 x=0; //做的时候被我落掉了,结果好久才找到错误! 38 for(int r=0;r<k1;r++){ 39 for(int p=k1-1;p>=0;p--){ 40 if(c[p][r]!=‘*‘){ 41 printf("%c",c[p][r]); 42 } 43 } 44 } 45 printf("\n"); 46 47 } 48 return 0; 49 }
原文:http://www.cnblogs.com/TWS-YIFEI/p/5572743.html