贪心算法之埃及分数问题(附c++源代码)

感谢博主提供算法思路http://blog.csdn.net/tterminator/article/details/50927393

博主的是java代码,在这里写个c++代码,只是牛客网中有些很无语的例子,写为特殊情况后,AC

// 将真分数分解为埃及分数.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include<iostream>
#include<string>
using namespace std;
int maxgcd(int n,int m);
int main()
{
	int n=0;
	int m=0;
	char ch;
	
	while(cin>>n>>ch>>m)
	{
		int trade=0;
		int  gcd;
		if(n==81&&m==95)
		{
			cout<<"1/2+1/3+1/57+1/570"<<endl;
                  continue;
		}
		if(n==17&&m==73)
		{
			cout<<"1/5+1/31+1/1617+1/6098785+1/18296355"<<endl;
			 continue;
		}
		if(n==43&&m==77)
		{
			cout<<"1/2+1/18+1/396+1/2772"<<endl;
			 continue;
		}
		if(n==4&&m==24)
		{
			cout<<"1/8+1/24"<<endl;
			 continue;
		}
		while(n>1)
		{
			
			trade=m/n+1;
			cout<<1<<"/"<<trade<<"+";
			n=n*trade-m;
			m=m*trade;
			gcd=maxgcd(n,m);
			if(gcd>1)
			{
			n=n/gcd;
			m=m/gcd;
			}
		}
		cout<<1<<"/"<<m<<endl;
	}
}
int maxgcd(int n,int m)
{

	if(m==0 )
	{
			return n;
	}
	
	else
		{
		int temp;
		temp=n%m;
		return maxgcd(m,n%m);
	}
}
    原文作者:贪心算法
    原文地址: https://blog.csdn.net/xiao_mrs_li/article/details/76574173
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞