题目:http://acm.hdu.edu.cn/showproblem.php?pid=1200
AC代码:
#include<stdio.h> #include<string.h> int main(){ int c,len,i,j,k,row,count,flag; char s1[201],p[21][201],s2[201]; while(scanf("%d",&c)!=EOF){ //c表示列数; getchar();//接受回车符; if(c==0){ break; } gets(s1); len=strlen(s1); i=0; row=0;//行数; while(i<len){//每次读取2行; j=0;//控制每一行5个字符; while(i<len&&j<c){//读取5个字符; p[row][j]=s1[i]; i++; j++; } row++; j=0; while(i<len&&j<c){//读取5个字符; p[row][c-1-j]=s1[i]; i++; j++; } row++; } if(len%c==0){ row=len/c;//行数; } else{ row=len/c+1; } if(len%c==0){ count=0;//需填充的字符个数; } else{ count=c-len%c; } if(row%2==1){//填充字符从右往左; k=0; for(i=0;i<c-count;i++){ for(j=0;j<row;j++){ s2[k++]=p[j][i]; } } for(i=c-count;i<c;i++){ for(j=0;j<row-1;j++){ s2[k++]=p[j][i]; } } for(i=0;i<len;i++){ printf("%c",s2[i]); } } else{//填充字符从右往左; k=0; for(i=0;i<count;i++){ for(j=0;j<row-1;j++){ s2[k++]=p[j][i]; } } for(i=count;i<row;i++){ for(j=0;j<row;j++){ s2[k++]=p[j][i]; } } for(i=0;i<len;i++){ printf("%c",s2[i]); } } printf("/n"); } }