- 论坛徽章:
- 0
|
/* ************************************************************************
* Filename: test.c
* Description:
* Version: 1.0
* Created: 2012/3/29? * Revision: none
* Compiler: gcc
* Author: 曹超
* Company: 实现两个任意数组的差值最小化的转换
* ************************************************************************/
#include <stdio.h>
static int change(int *a,int *b,int n)
{
int i = 0;
int j = 0;
int k=0;
int m = 0;
int mm=0;
int mmm=0;
int flag=0;
int cout=0;
int num=0,min=0,max=0,other=0;
int temp[200];
int *aa,*bb;
int *p ;
aa=a;
bb=b;
for(i=0;i<n;i++)
{
temp[i]=*aa++;
max = max+temp[i];
}
for(i=n;i<(2*n);i++)
{
temp[i]=*bb++;
max = max+temp[i];
}
p=temp;
min = max;
for(i=0;i<n+1;i++)
for(j=i+n-1;j<(2*n);j++)
{
num = 0;
for(k=0;k<n-1;k++)
{
num=*(p+k+i)+num;
//printf("temp[%d]+",k+i);
}
num=*(p+j)+num;
//printf("temp[%d]=%d\n",j,num);
cout++;
other = max - num;
if(other>=num)
{
other = other-num;
}
else
{
other = num - other;
}
if(other<min)
{
min = other;
for(m=0;m<n-1;m++)
{
a[m]= *(p+m+i);
}
a[m] = *(p+j);
//for(m=0;m<(n);m++)
//{
//printf("%d,",a[m]);
//}
//printf("\nmin=%d\n",min);
mmm=0;
bb=b;
for(mm=0;mm<(2*n);mm++)
{
for(m=0;m<n-1;m++)
{
if((m+i)==mm)
{
flag=1;
break;
}
}
if(flag==0&&(mm!=j))
{
*(bb+mmm)=temp[mm];
mmm++;
}
flag=0;
}
// for(m=0;m<(n);m++)
//{
// printf("%d,",b[m]);
//}
// printf("\n");
}
}
printf("计算次数:%d\n最小差值:%d\n",cout,min);
return 0;
}
int main()
{
int a[3]={0,0,1};
int b[3]={2,3,999};
int n=0;
change(a,b,3);
printf("结果\n a=");
for(n=0;n<3;n++)
{
printf("[%d] ",a[n]);
}
printf("\n b=");
for(n=0;n<3;n++)
{
printf("[%d] ",b[n]);
}
printf("\n");
}
|
|