[蓝蓝计算机考研算法训练二期]-day02

71 阅读1分钟

3.计算字符串中含有的不同字符的个数

思路:

类似哈希表,先创建一个长度为128的数组ASC,初始化全为0.用string储存输入的字符串,把string看做数组,顺序读取各个单元内的字符,按照对应的ASCll查ASC数组,若ASC数组对应单元为0,则赋值为1;

读完整个string后,扫描asc数组,其中1的个数即为不同字符数。

代码:

int main()
{
	int ASC[128];
	for (int i = 0; i <= 127; i++)
		ASC[i] = 0;
	string s;
	cin >> s;
	int len = s.length();

	for (int i = 0; i < len; i++)
	{
		int num = (int)s[i];
		if (ASC[num] == 0)
			ASC[num] = 1;
		
	}
	int zifunum = 0;
	for (int i = 0; i <= 127; i++)
		if (ASC[i] == 1)
			zifunum++;

	cout << zifunum << endl;
	
	
	system("pause");
}

验证正确

image.png

4、从键盘输入两个数字n,m,求解m和n的最小公倍数

思路:

利用公式mn之积等于两数的最大公约数和最小公倍数之积,转而求最大公约数,利用辗转相除法递归求出最大公约数,再求解

int maxYue(int M, int min)
{
	int i = M % min;
	if (i == 0)
		return min;
	else return max(min, i);
}
int main()
{
	int m = 0, n = 0;
	cin >> m >> n;
	int M = m > n ? m : n;
	int min = m < n ? m : n;
	
	int a = maxYue(M, min);
	cout << (m * n) / a << endl;

	system("pause");
}

测试成功

image.png