通过交换,使序列a的和与序列b的和之间的差的绝对值最小(栈和队列)
时间: 1ms 内存:1000M
描述:
要求:通过交换a,b中的元素,使[序列a元素的和]与[序列b元素的和]之间的差的绝对值最小。
例如:a={1,2,3,4,5};b={6,7,8,9,10};交换之后:
a={1,2,7,8,9};
b={3,4,5,6,10};
可能还有其他交换情况.....
输入:
输入a和b:
1 2 3 4 5
6 7 8 9 10
输出:
交换之后:
1 2 7 8 9
3 4 5 6 10
示例输入:
1 2 3 4 5
6 7 8 9 10
示例输出:
1 2 7 8 9
3 4 5 6 10
提示:
参考答案(内存最优[1120]):
#include<stdio.h>
#include<math.h>
#define MaxSize 101
int main()
{
int suma = 0,sumb = 0;
int counta = 0,countb = 0;
int a[MaxSize],b[MaxSize];
int temp;
int pa,pb;
int i,j;
while(counta<5)
{
scanf("%d",&a[counta]);
suma+=a[counta];
counta++;
}
while(countb<5)
{
scanf("%d",&b[countb]);
sumb+=b[countb];
countb++;
}
if(suma==sumb)
{
for(i = 0;i<counta;i++)
printf("%d ",a[i]);
printf("\n");
for(j = 0;j<countb;j++)
printf("%d ",b[j]);
return 0;
}
for(i = 0;i<counta;i++)
{
for(j = 0;j<countb;j++)
{
pa = suma-a[i]+b[j];
pb = sumb-b[j]+a[i];
if(fabs(pa-pb)<fabs(suma-sumb))
{
temp = a[i];
a[i] = b[j];
b[j] = temp;
suma = pa;
sumb = pb;
}
}
}
for(j = 0;j<countb;j++)
printf("%d ",b[j]);
printf("\n\n");
for(i = 0;i<counta-1;i++)
for(j = i+1;j<counta;j++)
{
if(a[i]>a[j])
{
temp = a[i];
a[i] = a[j];
a[j] = temp;
}
}
for(i = 0;i<counta;i++)
printf("%d ",a[i]);
}
参考答案(时间最优[2]):
#include<stdio.h>
#include<math.h>
#define MaxSize 101
int main()
{
int suma = 0,sumb = 0;
int counta = 0,countb = 0;
int a[MaxSize],b[MaxSize];
int temp;
int pa,pb;
int i,j;
while(counta<5)
{
scanf("%d",&a[counta]);
suma+=a[counta];
counta++;
}
while(countb<5)
{
scanf("%d",&b[countb]);
sumb+=b[countb];
countb++;
}
if(suma==sumb)
{
for(i = 0;i<counta;i++)
printf("%d ",a[i]);
printf("\n");
for(j = 0;j<countb;j++)
printf("%d ",b[j]);
return 0;
}
for(i = 0;i<counta;i++)
{
for(j = 0;j<countb;j++)
{
pa = suma-a[i]+b[j];
pb = sumb-b[j]+a[i];
if(fabs(pa-pb)<fabs(suma-sumb))
{
temp = a[i];
a[i] = b[j];
b[j] = temp;
suma = pa;
sumb = pb;
}
}
}
for(j = 0;j<countb;j++)
printf("%d ",b[j]);
printf("\n\n");
for(i = 0;i<counta-1;i++)
for(j = i+1;j<counta;j++)
{
if(a[i]>a[j])
{
temp = a[i];
a[i] = a[j];
a[j] = temp;
}
}
for(i = 0;i<counta;i++)
printf("%d ",a[i]);
}
题目和答案均来自于互联网,仅供参考,如有问题请联系管理员修改或删除。