首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

一个简单的acm题,格式异常了

2012-04-07 
一个简单的acm题,格式错误了将一个较短的字符串的字符交叉地插入到另一个较长的字符串中,每个字符以一定的

一个简单的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就是这么傻傻的函数。
另外,程序里你忘了限制输出短串结束后的内容,会导致结果很奇怪。
更正后代码如下:

C/C++ code
#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;} 

热点排行