将一个较短的字符串的字符交叉地插入到另一个较长的字符串中,每个字符以一定的间隔插入。该间隔=(长字符串长度/短字符串),即对两个字符串长度相除取整。例如:如果两个字符串等长(字符插入间隔=1),就将后输入的串的字符每隔一个字符插入先输入的串当中;被插入的字符串长度为12,待插入的字符串的长度为5,那么字符插入间隔为2,以此类推。请参考Sample Input和Sample Output。
Input
只有一组测试数据,两个字符串(它们的长度不会超过100)。
Output
输出1行信息,即插入后的新串。
Sample Input
ABCDEFG abcdefg
ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghi
Sample Output
AaBbCcDdEeFfGg
ABaCDbEFcGHdIJeKLfMNgOPhQRiSTUVWXYZ
Hint
注意输入的字符串中第一个字符串长度未必比第二个长。
我的代码如下:
#include "stdio.h"
#include<string.h>
int main()
{
int i,k,n,x;
char a[100],b[100];
scanf("%s%s",&a,&b);
k=strlen(a)/strlen(b)>strlen(b)/strlen(a)?strlen(a)/strlen(b):strlen(b)/strlen(a);
//求出长数组除以短数组的值
n=strlen(a)>strlen(b)?strlen(a):strlen(b);
//求出谁是长数组
if(strlen(a)>=strlen(b))//如果a是长数组
{
for(i=0;i<n;i++)
{
printf("%c",a[i]);
if((i+1)%k==0)
{
x=(i+1)/k-1;
printf("%c",b[x]);//每输出一个a数组间隔(X+1)/k-1个b数组
}
}
}
else//如果b是长数组
{
for(i=0;i<n;i++)
{
printf("%c",b[i]);
if((i+1)%k==0)
{
x=(i+1)/k-1;
printf("%c",a[x]);
}
}
}
return 0;
}
正确代码
#include "stdio.h"
#include<string.h>
int main()
{
int i,k,n,x;
int al,bl; /*增加字符串长度变量,用于存储字符串的长度,简化计算。*/
char a[100],b[100];
scanf("%s%s",&a,&b);
al=strlen(a);
bl=strlen(b);
k=al>bl?al/bl:bl/al; /*这里看起来就更清楚了*/
//求出长数组除以短数组的值
/*n=strlen(a)>strlen(b)?strlen(a):strlen(b);*/
//求出谁是长数组
if(al>=bl)//如果a是长数组
{
for(i=0;i<al;i++) /*n是没必要的了*/
{
printf("%c",a[i]);
if((i+1)%k==0)
{
x=(i+1)/k-1;
if (x<bl) /*这里是为了避免在b输出完之后仍继续取b成员*/
printf("%c",b[x]);//每输出一个a数组间隔(X+1)/k-1个b数组
}
}
}
else//如果b是长数组
{
for(i=0;i<bl;i++)
{
printf("%c",b[i]);
if((i+1)%k==0)
{
x=(i+1)/k-1;
if (x<al)
printf("%c",a[x]);
}
}
}
return 0;
}