一个简单的acm题,格式错误了
将一个较短的字符串的字符交叉地插入到另一个较长的字符串中,每个字符以一定的间隔插入。该间隔=(长字符串长度/短字符串),即对两个字符串长度相除取整。例如:如果两个字符串等长(字符插入间隔=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;
}
求高手解答,格式哪儿错了!,问题是可能很快就知道我没有换行,但是我一旦换行,就会是wrong answer!拜托了!
[解决办法]
你这个只能进行一次输入输出,题目要求多次。。。
[解决办法]
你输入的时候只能用空格分隔两个字符串,因为scanf就是这么傻傻的函数。
另外,程序里你忘了限制输出短串结束后的内容,会导致结果很奇怪。
更正后代码如下:
#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;}