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

36 阅读1分钟

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

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

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

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

输入描述

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

输出描述

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

思路:

感觉如果是用ASCII码范围的字符,那其实用转换为字符类型就可以判断了,然后对于多个相同字符只计算一次这个我觉得可以用数组实现,判断数组是否存在该字符,是则不存,不是则存。

具体实现

#include<stdio.h>
#include<string.h>
int main()
{
	char str[500]={0};
	char n[128]={0};
	int num,len;
	printf("请输入一个字符串:");
	gets(str);
	len=strlen(str);
	for(int j=0;j<len-1;j++)
	{	
			
		if(str[j]>=0&&str[j]<=127)
		{
			n[str[j]]++;	
		}
	}
	for(int i=0;i<127;i++)
	{
		if(n[i]!=0)
		{
			num++;
		}
	}
	printf("%d",num);
	
}

结果图

image.png

(打代码的时候本来想着要不就直接从一个数组和另外一个数组比较就可以知道有没有重复了,但是这个写完代码很长而已时间复杂度也很高,因为套了很多个for,后来想着干嘛不直接判断128个数组位里面有没有值呢,明明只在128个里面的字符,又设置了128长的数组,就换了思路写代码了)

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

思路

找大的数然后用取余判断

具体实现

#include<stdio.h>
int main()
{
	int a=0,b=0;
	printf("请输入两个数字,格式为:m n\n");
	scanf("%d %d", &a, &b);
	int m=a<b?a:b;
	while (m)
	{
		if (m%a==0&&m%b==0)
		{
			printf("%d\n", m);
			break;
		}
		m++;
	}
	return 0;
}

image.png