回 帖 发 新 帖 刷新版面

主题:第80次编程比赛(08第二学期开学第一炮)

原79次冠军因长时间不再发帖子,故本次由本人开展

[color=0000FF]题目描述:[/color]
现在,有两个正整数A和B,例如A是345,B是478,现在,需要把B插入到A里,
而A有三位,所以有四个位置选择,所得结果分别是:
478345, 347845, 344785, 345478
我们通过对比可以知道,在这当中最小的一个是344785
这两个正整数长度不超过100000位,各个位均不包含数字0
现在的目标是,要找出插入后所能得到的最小的整数,输出这个整数

[color=0000FF]样例输入:[/color]
345 478
12345 678
12 21
12 23

[color=0000FF]样例输出:[/color]
344785
12345678
1212
1223

[color=0000FF]答题要求:[/color]
请完善以下代码(C/C++均可):
[code=c]#include <stdio.h>
#define MAXLEN 100000

//todo: 在此增加你所需要的函数或者变量或者头文件

void deal(char* a, char* b, char* c)
{
    // todo: 在此补充你的处理代码
    // 参数说明: a和b是输入的字符串,c要保存输出结果
}

char a[MAXLEN+1], b[MAXLEN+1], c[MAXLEN*2+1];
int main(void)
{
    while (scanf("%s%s", a, b)!=EOF)
    {
        deal(a, b, c);
        puts(c);
    }
    return 0;
}[/code]

其它信息:
本次比赛以公开答题代码的形式,且附以及时的测试,允许直接在本帖子讨论算法
测试内容:正确性,时间效率,空间效率,代码可读性
本次比赛结束时间3月8日 23:00

[color=FF0000]在本帖子回复广告或比赛无关内容者立即封ID及IP[/color]

回复列表 (共182个回复)

161 楼


本人刚试过,没有错误,楼主用的是那个编译器?请楼主指出错误在哪儿?

162 楼


#include <stdio.h>
#define MAXLEN 100000


void deal(char* a, char* b, char* c)
{
int i=0,l,j=0,t;
strcat(c,a);
strcat(c,b);
l=strlen(c)-1;
for(i=0;i<l;i++)
{
 for(j=1;j<l-i;j++)
 if(c[i]>c[j])
 {
   t=c[i];
   c[i]=c[j];
   c[j]=t;
  }
}
}

char a[MAXLEN+1], b[MAXLEN+1], c[MAXLEN*2+1];
int main(void)
{
    while (scanf("%s%s", a, b)!=EOF)
    {
        deal(a, b, c);
        puts(c);
    }
    return 0;
}

163 楼

#include <stdio.h>
#define MAXLEN 100000


void deal(char* a, char* b, char* c)
{
int i=0,l,j=0,t;
strcat(c,a);
strcat(c,b);
l=strlen(c)-1;
for(i=0;i<l;i++)
{
 for(j=1;j<l-i;j++)
 if(c[i]>c[j])
 {
   t=c[i];
   c[i]=c[j];
   c[j]=t;
  }
}
}

char a[MAXLEN+1], b[MAXLEN+1], c[MAXLEN*2+1];
int main(void)
{
    while (scanf("%s%s", a, b)!=EOF)
    {
        deal(a, b, c);
        puts(c);
    }
    return 0;
}

164 楼

[quote]
本人刚试过,没有错误,楼主用的是那个编译器?请楼主指出错误在哪儿?[/quote]
你说一下你的程序对于输入 12 21 的输出结果

165 楼

163楼的代码编译错误
更正后的代码对于多组输入时严重错误
并且更正上面这个问题后输出结果和题目描述仍然相差很多

166 楼


呵呵!不好意思了楼主,看出错误在哪儿了!

167 楼

这次结束了吗?我好久没来了,刚看到,不过也写了一个代码。现在发上去不知道还来不来得及。

168 楼

要是来得及,请楼主说一下,谢谢。

169 楼

只要我一天没有出最后结果都行,这两天我忙死了

170 楼

#include <stdio.h>
#include <math.h>
#include<string.h>
#include<stdlib.h>
void main()
{
    int a,b,la,lb,i,j,temp=0xfffffff,flag=1;
    char a1[10],b1[10],c[20];
    while(flag)
    {
        temp=0xfffffff;
        printf("two number:");
         scanf("%d%d",&a,&b);
        a=a;b=b;
         sprintf(a1,"%d",a);sprintf(b1,"%d",b);
         la=strlen(a1);lb=strlen(b1);
         for(i=0;i<=la;i++)
        {
            if(i==0) sprintf(c,"%s%s",b1,a1);
            if(i==la) sprintf(c,"%s%s",a1,b1);
            else
                for(j=0;j<la+lb;j++)
                {
                     if(j<i)        c[j]=a1[j];
                     if(j>=i && j<i+lb)     c[j]=b1[j-i];
                    if(j>=i+lb)     c[j]=a1[j-lb];
                }
            c[la+lb]='\0';
            if(temp>(atoi(c))) temp=atoi(c);
        }
        printf("%d\n",temp);
        printf("请按0结束或者按其他键继续:\n");
            scanf("%d",&flag);
    }
}

我来回复

您尚未登录,请登录后再回复。点此登录或注册