主题:第80次编程比赛(08第二学期开学第一炮)
雨中飞燕 [专家分:18980] 发布于 2009-02-21 18:44:00
原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]
最后更新于:2009-02-22 11:57:00
回复列表 (共182个回复)
161 楼
ChRise [专家分:50] 发布于 2009-03-08 18:24:00
本人刚试过,没有错误,楼主用的是那个编译器?请楼主指出错误在哪儿?
162 楼
zqh198971 [专家分:0] 发布于 2009-03-08 19:03:00
#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 楼
zqh198971 [专家分:0] 发布于 2009-03-08 19:03:00
#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 楼
雨中飞燕 [专家分:18980] 发布于 2009-03-08 21:36:00
[quote]
本人刚试过,没有错误,楼主用的是那个编译器?请楼主指出错误在哪儿?[/quote]
你说一下你的程序对于输入 12 21 的输出结果
165 楼
雨中飞燕 [专家分:18980] 发布于 2009-03-08 21:39:00
163楼的代码编译错误
更正后的代码对于多组输入时严重错误
并且更正上面这个问题后输出结果和题目描述仍然相差很多
166 楼
ChRise [专家分:50] 发布于 2009-03-09 22:35:00
呵呵!不好意思了楼主,看出错误在哪儿了!
167 楼
chowlea [专家分:0] 发布于 2009-03-11 21:21:00
这次结束了吗?我好久没来了,刚看到,不过也写了一个代码。现在发上去不知道还来不来得及。
168 楼
chowlea [专家分:0] 发布于 2009-03-11 21:22:00
要是来得及,请楼主说一下,谢谢。
169 楼
雨中飞燕 [专家分:18980] 发布于 2009-03-11 22:59:00
只要我一天没有出最后结果都行,这两天我忙死了
170 楼
chowlea [专家分:0] 发布于 2009-03-12 22:01:00
#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);
}
}
我来回复