算法练习5:Common Denominators

算法练习5

- max函数

需要用#include<algorithm>

格式max(a,b);//只能比较两个数

三个数的比较:max(a,b>c?b:c);


- 计算三个数的最小公倍数

思路是这样,假设三个数x,y,z 先拿x,y取最小公倍数n 再拿n和z取最小公倍数,得到结果 程序没有给出,不过只要你会写两个数的最小公倍数那部份的就可以了

算法比较:

unsigned long long Fracts::gcd(unsigned long long a, unsigned long long b)
{
    return b == 0 ? a : gcd(b, a % b);//递归函数
}

unsigned long long Fracts::lcm(unsigned long long a, unsigned long long b)
{
    return a * b / gcd(a, b);
}

for循环:

在最新的C++中,支持for循环的5种用法,你可知道?

    #include <algorithm>  
    #include <vector>  
    //  
    int nArray[] = {0, 1, 2, 3, 4, 5};  
    std::vector<int> vecNum(nArray, nArray + 6);  
    CString strText;  
    // 第一种用法:最原始的语法(用下标)  
    for (size_t i = 0; i < vecNum.size(); ++i)  
    {  
        strText.Format("%d", nArray[i]);  
        AfxMessageBox(strText);  
    }  

    // 第二种用法:最原始的语法(用迭代器)  
    for (auto it = vecNum.begin(); it != vecNum.end(); ++it)  
    {  
        strText.Format("%d", *it);  
        AfxMessageBox(strText);  
    }  

    // 第三种用法:简化数组遍历语法(从vs2008开始支持)  
    for each(auto item in vecNum)  
    {  
        strText.Format("%d", item);  
        AfxMessageBox(strText);  
    }  

    // 第四种用法:STL函数  
    std::for_each(vecNum.begin(), vecNum.end(), [](int item){  
                                                       CString strText;  
                                                   strText.Format("%d", item);  
                                           AfxMessageBox(strText);  
                                                        });  

    // 第五种用法:C++11新增加的(VS2012支持)  
    for(auto item : vecNum)  
    {  
        strText.Format("%d", item);  
        AfxMessageBox(strText);  
    }  

- 完整代码:

#include<string>
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
class Fracts
{

public:
    static unsigned long long leaseCommonMultipleTwo(unsigned long long lst1,unsigned long long lst2 )//make the lease common multiple bewteen two numbers
    {
        unsigned long long multiple = lst1*lst2;
        unsigned long long tmp;
        unsigned long long l1=max(lst1,lst2);
        unsigned long long l2=min(lst1,lst2);

        while (l2)
        {
            tmp = l1%l2;
            l1 = l2;
            l2=tmp;
            cout << l2;
            //cout << l1;
        }

        return multiple / l1;



    };
    static unsigned long long leaseCommonMultipleThree(std::vector<std::vector<unsigned long long>>&lst)
    {
        unsigned long  long  result = lst[0][1];
        for (int i = 1; i < lst.size(); i++)
        {
            result= leaseCommonMultipleTwo(lst[i][1], result);

        }
        return   result;



    }
    static std::string convertFrac(std::vector<std::vector<unsigned long long>> &lst)
    {
        std::string result="";
        unsigned long long  LCM=leaseCommonMultipleThree(lst);
        /*cout << leaseCommonMultiple(lst) << endl;*/
        for (int i = 0; i < lst.size(); i++)
        {

            /*result += "(" ;
            result += std::to_string(LCM/lst[i][1]*lst[i][0]) ;
            result += ",";
            result += std::to_string(LCM);
            result += ")";*/
            result = result + "(" + std::to_string(LCM / lst[i][1] * lst[i][0]) + "." + std::to_string(LCM) + ")";
        /*  cout << lst[i][0] * LCM/lst[i][1] << endl;*/
            cout << result << endl;
        }

        return result;

    };
};
 int main()
{

    std::vector<std::vector<unsigned long long>> r1 = { { 69, 130 }, { 87, 1310 }, { 3, 4 }, {4,5} };
    std::string ans1 = Fracts::convertFrac(r1);
    std::string sol1 = "(6,12)(4,12)(3,12)";
    cout << "ans1=" << ans1 << endl;
    /*int tes = Fracts::leaseCommonMultiple(r1);
    cout << "tes=" << tes << endl;
*/

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值