好像蛮老的一个问题求解

yeyinyue 2005-06-01 11:29:46
九个数字1.2.3.4.5.6.7.8.9
组成3个分式,分母为两位数,分子个位数,三个分式之和等于一
格式为:a/bc+d/ef+g/hi=1 (a-i分别代表1-9中的一个数字,不能重复)
...全文
232 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
NowCan 2005-06-06
  • 打赏
  • 举报
回复
我来了,最土的办法。
/*
有9个数a,b,c,d,e,f,g,h,i,分别是1~9中的一个,不重复。
现有a/bc+d/ef+g/hi=1,求a~i
*/

int main()
{
long a,b,c,d,e,f,g,h,i;
long x,y,z;
for(a=1;a<=9;a++)
{
for(b=1;b<=9;b++)
{
if(b==a)continue;
for(c=1;c<=9;c++)
{
if(c==a||c==b)continue;
for(d=1;d<=9;d++)
{
if(d==a||d==b||d==c)continue;
for(e=1;e<=9;e++)
{
if(e==a||e==b||e==c||e==d)continue;
for(f=1;f<=9;f++)
{
if(f==a||f==b||f==c||f==d||f==e)continue;
for(g=1;g<=9;g++)
{
if(g==a||g==b||g==c||g==d||g==e||g==f)continue;
for(h=1;h<=9;h++)
{
if(h==a||h==b||h==c||h==d||h==e||h==f||h==g)continue;
for(i=1;i<=9;i++)
{
if(i==a||i==b||i==c||i==d||i==e||i==f||i==g||i==h)continue;
x=10*b+c;
y=10*e+f;
z=10*h+i;
if(x*y*z==a*y*z+d*x*z+g*x*y)
{
printf("%d/%d%d+%d/%d%d+%d/%d%d=1\n",a,b,c,d,e,f,g,h,i);
}
}
}
}
}
}
}
}
}
}
return 0;
}
yeyinyue 2005-06-06
  • 打赏
  • 举报
回复
超版强,我朋友也给了一个程序,不过他说也是看书上来的。
#include <vcl.h>
#pragma hdrstop

//---------------------------------------------------------------------------

#pragma argsused
#include "stdio.h"
#include "iostream.h"

void func(int n,int * a);

void main(void)
{
int arr[]={1,2,3,4,5,6,7,8,9};

func(9,arr);
getchar();
}
void func(int n,int * a) {
static int Num =0;
int *i=new int[n];
int c=0,j;
i[c]=-1;
while(i[0]<n){
if(++i[c]<n) {
for(j=0; j<c ;j++)
if( i[j] == i[c])
break;

if(j==c){
if(c+1<n){
++c;
i[c]=-1;

}
else{
cout.width(2);
//cout<<Num++<< " ";
double x,y,z;
x = (double)a[i[0]]/((double)(a[i[1]]*10)+(double)a[i[2]]);
y = (double)a[i[3]]/((double)(a[i[4]]*10)+(double)a[i[5]]);
z = (double)a[i[6]]/((double)(a[i[7]]*10)+(double)a[i[8]]);
double sum = ((double)(x + y + z) -(double)1);
if(sum < 0.0000001 && sum > -0.0000001){
for(int j=0;j<n;j++)
cout<<a[i[j]]<<",";
cout<<endl;
}
}
}
}
else
c--; }

}
mmmcd 2005-06-02
  • 打赏
  • 举报
回复
找到了一个解,全排列一下,共六个:
5/34+7/68+9/12=1
5/34+9/12+7/68=1
7/68+5/34+9/12=1
7/68+9/12+5/34=1
9/12+5/34+7/68=1
9/12+7/68+5/34=1
=================================

#include <iostream>
#include <cmath>
using namespace std;
double a[9];
bool used[9];
void go(int k)
{
int i;
double ans;
if(k<9)
{
for(i=1;i<=9;i++)
{
if(used[i])continue;
used[i]=1;
a[k]=i;
go(k+1);
used[i]=0;
}
}else{
ans=0;
for(i=0;i<3;i++){
ans+=a[i*3]/(a[i*3+1]*10+a[i*3+2]);
}
if(fabs(ans-1)<1e-13)
{
for(i=0;i<3;i++){
cout<<a[i*3]<<'/'<<a[i*3+1]<<a[i*3+2];
if(i<2)cout<<'+';
else cout<<"=1\n";
}
}
}
}

int main(){
go(0);
return 0;
}
67140170 2005-06-02
  • 打赏
  • 举报
回复
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <iostream.h>
#include <time.h>
#include <windows.h>

void main()
{
int a,b,c,d,e,f,g,h,i;


SYSTEMTIME st;
GetSystemTime(&st);
printf("%d\t",st.wSecond );
printf("%d",st.wMilliseconds );
printf("\n");
for(a=1;a<=9;a++)
{
for(b=1;b<=9;b++)
{
if(b!=a)
{
for(c=1;c<=9;c++)
{
if((c!=b)&&(c!=a))
{
for(d=1;d<=9;d++)
{
if((d!=a)&&(d!=b)&&(d!=c))
{
for(e=1;e<=9;e++)
{
if((e!=a)&&(e!=b)&&(e!=c)&&(e!=d))
{
for(f=1;f<=9;f++)
{
if((f!=a)&&(f!=b)&&(f!=c)&&(f!=d)&&(f!=e))
{
for(g=1;g<=9;g++)
{
if((g!=a)&&(g!=b)&&(g!=c)&&(g!=d)&&(g!=e)&&(g!=f))
{
for(h=1;h<=9;h++)
{
if((h!=a)&&(h!=b)&&(h!=c)&&(h!=d)&&(h!=e)&&(h!=f)&&(h!=g))
{
for(i=1;i<=9;i++)
{
if((i!=a)&&(i!=b)&&(i!=c)&&(i!=d)&&(i!=e)&&(i!=f)&&(i!=g)&&(i!=h))
{

if((a*(10*e+f)*(10*h+i)+g*(10*b+c)*(10*e+f)+d*(10*b+c)*(10*h+i))==((10*b+c)*(10*e+f)*(10*h+i)))
{

printf("%d,%d,%d,%d,%d,%d,%d,%d,%d",a,b,c,d,e,f,g,h,i);
printf("\n");

}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
GetSystemTime(&st);
printf("\n");
printf("%d\t",st.wSecond );
printf("%d\n",st.wMilliseconds );
}
xiaoluoli 2005-06-02
  • 打赏
  • 举报
回复
呵呵,通分后,分子相加之和等于分母。
可以考虑可能方便
寻开心 2005-06-02
  • 打赏
  • 举报
回复

5/34+7/68+9/12=1
就是
a/(b*10+c)+d/(e*10+f)+g/(h*10+i)=1

zzwu 2005-06-02
  • 打赏
  • 举报
回复
a/bc+d/ef+g/hi=1 的含义应为

(a/b)*c+(d/e)*f+(g/h)*i=1

而不是

a/(b*10+c)+d/(e*10+f)+g/(h*10+i)=1

也不是

a/(b*c)+d/(e*f)+g/(h*i)=1
xiaoluoli 2005-06-01
  • 打赏
  • 举报
回复
a/bc+d/ef+g/hi=1
凑吧
yeyinyue 2005-06-01
  • 打赏
  • 举报
回复
我也闷了一天了,做9个循环是很郁闷的事。
NowCan 2005-06-01
  • 打赏
  • 举报
回复
不知道有什么简单办法。一个一个的凑好像很麻烦。
NowCan 2005-06-01
  • 打赏
  • 举报
回复
嗯,只有这一个解,直接9个循环还是很快的,1秒都不到。
yeyinyue 2005-06-01
  • 打赏
  • 举报
回复
有解:5/34+7/68+9/12=1
只看程序怎么编了
xiangxyz 2005-06-01
  • 打赏
  • 举报
回复
生成一个二维数组
{1,2,3,4,5,6,7,8,9
1,3,2,4,5,6,7,8,9
。。。。。。。。。}
一共有9的阶层行
然后将每一行带入算式
yeyinyue 2005-06-01
  • 打赏
  • 举报
回复
如果下面是乘法关系,1/3*6+5/8*9+7/2*4=1倒是有解的。
yeyinyue 2005-06-01
  • 打赏
  • 举报
回复
是否精度不够?我弄了一个也是无解。
NowCan 2005-06-01
  • 打赏
  • 举报
回复
x=10b+c
y=10e+f
z=10h+i
检验ayz+dxz+gxy==xyz?
结果无解???
还是我程序有问题?
jihanzhong 2005-06-01
  • 打赏
  • 举报
回复
全排列 9!种情况
yeyinyue 2005-06-01
  • 打赏
  • 举报
回复
对,是a/(b*10+c) + d/(e*10+f) + g/(h*10+i) = 1,谢谢happy__888([顾问团]寻开心)指出。
寻开心 2005-06-01
  • 打赏
  • 举报
回复
是 a/(b*10+c) + d/(e*10+f) + g/(h*10+i) = 1 吧
是可以硬凑,再想想看哪里可以优化吧
Zephyrzzz 2005-06-01
  • 打赏
  • 举报
回复
变成aefhi+dbchi+gbcef=bcefhi
然后用生成排列的方法代进去检验吧,其实最多也才9!而已.

33,028

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧