算法练习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;
*/
}