埃及分数

一.问题描述  

  在古埃及,人们使用单位分数的和(形如1/a的, a是自然数)表示一切有理数。如:2/3=1/2+1/6,但不允许2/3=1/3+1/3,因为加数中有相同的。对于一个分数a/b,表示方法有很多种,但是哪种最好呢?

  首先,加数少的比加数多的好,其次,加数个数相同的,最小的分数越大越好。

  如:

    19/45=1/3 + 1/12 + 1/180

    19/45=1/3 + 1/15 + 1/45

    19/45=1/3 + 1/18 + 1/30,

    19/45=1/4 + 1/6 + 1/180

    19/45=1/5 + 1/6 + 1/18.

  最好的是最后一种,因为1/18比1/180,1/45,1/30,1/180都大。

二.算法描述

  

 1 //按照贪心输出其中的一种 
 2 #include<iostream>
 3 using namespace std;
 4 int main()
 5 {    
 6     int A,B,C,D;    
 7     cin>>A>>B;    
 8     if(A>=B) 
 9         cout<<"error";    
10     cout<<A<<"/"<<B<<"=";    
11     while(A!=1)    
12     {                
13         C=B/A+1;        
14         cout<<"1/"<<C<<"+"; 
15         
16         //下两步骤类似通分       
17         A=A*C-B;        
18         B=B*C;        
19         if(B%A==0)        
20         {            
21 
22             cout<<"1/"<<B/A<<endl;            
23             A=1;        
24         }    
25     } 
26     //while(1);   
27     return 0;
28 }

等有时间了研究下迭代加深的A*算法……

posted @ 2013-04-11 13:13  加拿大小哥哥  阅读(464)  评论(0编辑  收藏  举报