| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 677 人关注过本帖
标题:[原创]一道数学题的求解(希望大家多多指教)
只看楼主 加入收藏
txbhj
Rank: 1
等 级:新手上路
帖 子:35
专家分:0
注 册:2004-12-19
收藏
 问题点数:0 回复次数:5 
[原创]一道数学题的求解(希望大家多多指教)

题目:
将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编辑过]

搜索更多相关主题的帖子: 数学题 求解 指教 
2006-03-15 12:11
txbhj
Rank: 1
等 级:新手上路
帖 子:35
专家分:0
注 册:2004-12-19
收藏
得分:0 
怎么没有人来给出自己的想法啊,大家都来讨论讨论。

我本菜鸟, 请多关照
2006-03-15 20:48
cordier
Rank: 2
等 级:论坛游民
威 望:1
帖 子:449
专家分:14
注 册:2006-2-9
收藏
得分:0 
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++;

这个全排列算法好.

2006-03-16 16:10
cordier
Rank: 2
等 级:论坛游民
威 望:1
帖 子:449
专家分:14
注 册:2006-2-9
收藏
得分:0 
小弟我也胡扯了一个
#include <stdio.h>
#include <conio.h>
#define N 5
main()
{
int date[N];
int i,j,n,save,flag=0,max=1;
long f1,f2,mul,mulmax=0,f1max,f2max;
system("cls");
for (i=0;i<N;i++)
max*=N;
for (n=0;n<max;n++)
{
flag=1;
save=n;
for (i=0;i<N;i++,save/=N)
date[N-1-i]=5+save%N;
for (i=0;i<N&&flag;i++)
for (j=i+1;j<N&&flag;j++)
if (date[i]==date[j])
flag=0;
if (flag==0)
continue;
for (i=0,f1=0;i<3;i++)
f1=f1*10+date[i];
for (i=0,f2=0;i<2;i++)
f2=f2*10+date[3+i];
mul=f1*f2;
if (mul>mulmax)
{
mulmax=mul;
f1max=f1;
f2max=f2;
}
}
printf("max:%ld*%ld=%ld\n",f1max,f2max,mulmax);
getch();
}
不要见笑

2006-03-16 16:14
liuyx880
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2006-3-13
收藏
得分:0 

我作到把5个数都求了出来,后面懒着做了,大家指教一下
#include <stdio.h>
void main()
{
int a,b,c,d,e;
int sum;

for (a=5;a<=9;a++)
{ for (b=5;b<=9;b++)
{
if (a!=b)
for (c=5;c<=9;c++)
{
if (c!=a&&c!=b)
for (d=5;d<=9;d++)
{
if (d!=a&&d!=b&&d!=c)
for (e=5;e<=9;e++)
{
if (e!=a&&e!=b&&e!=c&&e!=d)
sum=(a*100+b*10+c)*(d*10+e);
}
}
}

}
printf("%d",sum);
printf("\n");
}

}

2006-03-16 16:39
txbhj
Rank: 1
等 级:新手上路
帖 子:35
专家分:0
注 册:2004-12-19
收藏
得分:0 

你们都写得不错啊,循环语句用得好,我开始也试过用for语名来写,但我总是很难找出循环的变量,不好控制。看了你们写的代码使我受益非浅。


我本菜鸟, 请多关照
2006-03-18 12:24
快速回复:[原创]一道数学题的求解(希望大家多多指教)
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.020712 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved