每日一题 | day08(两种排序方法 | 求最小公倍数)

选择题

1、假定有类AB,有相应的构造函数定义,能正确执行。语句,请问执行完此语句后共调用该类的构造函数次数为___

AB a(4),b(5),c[3],*p[2]={
     &a,&b};

A 5
B 4
C 3
D 9

正确答案 A:a对象调用1次,b对象调用1次,C对象调用3次,p没调用,所以一共调用5次

编程题

题目1
每日一题 | day08(两种排序方法 | 求最小公倍数)_第1张图片
解题思路
输出结果有4种,我们可以定义,两个变量用于不同输出的判断,一个a和b,初始值都为1,a用于判断是否是按字典排序,b用于判断是否按长度排序,只要不满足就将变量置为0。输出时,如果a=1,b=1,表示满足两种排序;如果a=1,b=0,表示只按照字典排序;如果a=0,b=1,表示只按长度排序;如果a=0,b=0表示都不满足。
代码

#include 
#include 
#include 
using namespace std;

int main()
{
     
	int n;
	cin >> n;
	int a = 1;
	int b = 1;
	vector<string> v(n);
	for (int i = 0; i < n; ++i)
	{
     
		cin >> v[i];
	}
	for (int i = 0; i < n - 1; ++i)
	{
     
		//库中的比较以就是按字典排序的
		//前者大于后者,不满足字典排序
		if (v[i] >= v[i + 1])
		{
     
			a = 0;
		}
		//不是按长度排序
		if (v[i].size() >= v[i + 1].size())
		{
     
			b = 0;
		}
	}
	if (a && b)
		cout << "both" << endl;
	else if (a && !b)
		cout << "lexicographically" << endl;
	else if (!a && b)
		cout << "lengths" << endl;
	else if (!a && !b)
		cout << "none" << endl;
	return 0;
}

题目2
每日一题 | day08(两种排序方法 | 求最小公倍数)_第2张图片
题解思路
最小公倍数=两数之积除以最大公约数,这里使用碾转相除法进行最大公约数的求解:即a与b的最大公约数可以转化为a、b之间的余数为两者之间最小的数之间的公约数。所以对于输入的两个数进行连续求余,直到余数为0,求余的分母即为结果。

代码

#include 
using namespace std;
//最大公约数
int gcb(int a, int b)
{
     
	int tmp;
	if (a < b)
	{
     
		tmp = a;
		a = b;
		b = tmp;
	}
	while (b != 0)
	{
     
		tmp = a % b;
		a = b;
		b = tmp;
	}
	return a;
}
//最小公倍数
int commonMultiple(int a, int b)
{
     
	return a * b / gcb(a, b);
}
int main()
{
     
	int a, b;
	cin >> a >> b;
	int res = commonMultiple(a, b);
	cout << res << endl;
	return 0;
}

你可能感兴趣的:(每日一题,算法)