题目
The string "PAYPALISHIRING"
is written in a zigzag pattern on a given number of rows like this: (you may want to display this pattern in a fixed font for better legibility)
P A H N A P L S I I G Y I RAnd then read line by line:
"PAHNAPLSIIGYIR"
Write the code that will take a string and make this conversion given a number of rows:
string convert(string text, int nRows);
convert("PAYPALISHIRING", 3)
should return "PAHNAPLSIIGYIR"
.
解题思路是:首尾中的数字的间距为2*nrows-2,中间部分还需要加入一些数据,这个数据与前一个数据之间的关系为2(nrows-1-i).代码为:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
char* convert(char* s, int numRows) {
int k,i,j;
int k1=0;
char *s1;
int gap=2*numRows-2;
k = strlen(s);
s1=(char*)malloc(sizeof(char)*k);
if(numRows==1||k<=numRows) return s;
for(i=0;i<k;i+=gap){
s1[k1++]=s[i];
}
for(i=1;i<numRows-1;i++){
for(j=i;j<k;j+=gap){
s1[k1++]=s[j];
if((j+2*(numRows-1-i)<k))
s1[k1++]=s[j+2*(numRows-1-i)];
}
}
for(i=numRows-1;i<k;i+=gap)
s1[k1++]=s[i];
s1[k1]='\0';
return s1;
}
int main()
{
char s[]="glzamzp";
char *s1=(char*)malloc(sizeof(char)*strlen(s));
s1=convert(s,5);
printf("原来的字符%s \n之行之后的字符%s\n %d\n",s,s1, strlen(s1));
}
但我不知道为什么提交上去的时候,求解答
Submission Result: Runtime ErrorMore Details
Last executed input: | "glzamzp", 5 |