• 埃及分数


    一.问题描述  

      在古埃及,人们使用单位分数的和(形如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*算法……

  • 相关阅读:
    【游戏开发】Excel表格批量转换成CSV的小工具
    iOS
    iOS
    Xcode
    iOS
    iOS
    iOS
    iOS
    iOS
    iOS
  • 原文地址:https://www.cnblogs.com/hxsyl/p/3014293.html
Copyright © 2020-2023  润新知