算法练习5:Common Denominators

来源:互联网 发布:印度最新人口数据2016 编辑:程序博客网 时间:2024/06/05 02:59

算法练习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
原创粉丝点击