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

93 阅读1分钟

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

编写一个函数,计算字符串中含有的不同字符的个数。字符在ASCII码范围内(0~127,包括0和127),换行表示结束符,不算在字符里。不在范围内的不作统计,多个相同的字符只计算一次。例如,对于字符串abaca,有a、b. c三种不同的字符,因此输出3。

数据范围: 1 <= n<=500

输入描述

输入一行没有空格的字符串。

输出描述

输出字符串中范围在(0~127,包括0和127)字符的种数。

思路

输入一行字符串,将字符逐个添加到set容器中,利用set容器的去重特性,输出set容器的长度即为答案。

具体实现

#include<iostream>
#include<set>
using namespace std;

int main(){
    string text;    //存放输入的字符串
    getline(cin,text);    //获取输入的一行字符串
    set<char> s;    //使用set容器
    for(int i=0;i<text.length();i++){
        s.insert(text[i]);    //将text中的字符逐个添加到set容器中
    }
    cout<<s.size()<<endl;    //输出set容器的长度,即为不同字符的个数
}

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

思路

辗转相除法,讲求n,m的公约数转化为求m,n mod m的最大公约数。

具体实现

#include<iostream>
using namespace std;

int GCD(int a,int b){
	if(b==0){
		return a;
	}
	else{
		return GCD(b,a%b);
	}
}
int main(){
	int n,m;
	cin>>n>>m;
	cout<<n*m/GCD(n,m);
}