题目:
将5,6,7,8,9填入下面空格中使它们的积有最大值口口口X口口,试找出该组合。
我用C解答如下:
long int b[5]={0,0,0,0,0};/*定义一个全局变量数组用于存放当前所排列数组的状态*/
main()
{
int a[5]={5,6,7,8,9};
int c[5]={0,0,0,0,0}; /*该数组用于记录乘积最大的一组数*/
int n0=0,n1=0,n2=0,n3=0,n4=0,i,k;
long int m=0;
for(i=0;i<120;i++)
{
if(!(i%5))
{printf("please press any key to continue...\n");
getch();
}
insert(a[0],n0);
insert(a[1],n1);
insert(a[2],n2);
insert(a[3],n3);
insert(a[4],n4);
if(n1==1&&n2==2&&n3==3&&n4==4)n1=-1;/*注意此判断语句的写法,将变化最快的量放在最下面*/
n1+=n2/2&&n3/3&&n4/4;
if(n2==2&&n3==3&&n4==4)n2=-1;
n2+=n3/3&&n4/4;
if(n3==3&&n4==4)n3=-1;
n3+=n4/4;
if(n4==4)n4=-1;
n4++;
if(m<(b[0]*100+b[1]*10+b[2])*(b[3]*10+b[4]))/*寻找乘积最大的组合*/
{m=(b[0]*100+b[1]*10+b[2])*(b[3]*10+b[4]);
for(k=0;k<5;k++)
c[k]=b[k]; /*记录该组合于C[5]中*/
}
for(k=0;k<5;k++)
printf("%d,",b[k]);
printf("\n");
}
printf("%d%d%d*%d%d=%ld",c[0],c[1],c[2],c[3],c[4],m);
printf("\n");
getch();
}
insert(int a,int j)/*带有位置插入元素的函数*/
{int i;
for(i=4;i>=j;i--)
b[i]=b[i-1];
b[j]=a;
}
以上代码能将每一种组合显示出来,所有组合显示完后给出题目的解。(调试无错误)希望大家指出其中的不足之处,使代码更简单。
[此贴子已经被作者于2006-3-15 12:15:05编辑过]