字符串的处理

题目是:笨小猴的词汇量很小,所以每次做英语选择题的时候都很头疼。但是他找到了一种方法,经试验证明,用这种方法去选择选项的时候选对的几率非常大!
这种方法的具体描述如下:假设maxn是单词中出现次数最多的字母的出现次数,minn是单词中出现次数最少的字母的出现次数,如果maxn-minn是一个质数,那么笨小猴就认为这是个Lucky Word,这样的单词很可能就是正确的答案。
示例:
输入:error
输出:lucky Word
2
说明:出现最多的3-出现最少的1=2是质数
输入:beijing
输出:No Answer
0
说明:出现最多的2-出现最少的1=1不是质数
(如果结果是No Answer,那么最后输出的第二行结果一定是0.)
上代码:

#include 
#include 
#include 
bool IsPrimer(int number)//判断一个数是否为质数
{
	if(number==0 || number==1)
	{
		return false;//0  1不是质数
	}
	if(number==2)
	{
		return true;//2是质数
	}
	for(int i=2;i<number;i++)
	{
		if(number%i==0)
		{
			return false;//能整除不是质数
		}
	}
	return true;//否则是质数
}
void Swap(int *a,int *b)//对两个变量进行交换
{
	int tmp=*a;
	*a=*b;
	*b=tmp;
}
void BubbleSort(int *arr,int len)//冒泡排序比较数组大小
{
	for(int i=0;i<len-1;i++)
	{
		for(int j=0;j<len-1-i;j++)
		{
			if(arr[j]>arr[j+1])
			{
				Swap(&arr[j],&arr[j+1]);//如果前面的数大于后面的将两个数的位置交换
			}
		}
	}
}
int main()
{
	char arr[100];
	char book1[26]={'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t',
	                          'u','v','w','x','y','z'};//将可能出现的字母列举出来
	int book2[26]={0};//类似于一个桶,将字母出现的次数对应在一个整型的桶中
	int *book3=(int *)malloc(100*sizeof(int));//将桶中不为0的数字(对应字母出现的次数)放到另外一个数组中
	for(int i=0;i<100;i++)
	{
		book3[i]=0;//将新的数组元素全部初始化为0
	}
	int maxn,minn;
	int j=0;
	fgets(arr,100,stdin);
	int len=strlen(arr);
	for(int i=0;i<len;i++)
	{
		for(int j=0;j<26;j++)
		{
			if(arr[i]==book1[j])
			{
				book2[j]++;//计算对应位置的字母出现的次数
			}
		}
	}
	for(int i=0;i<26;i++)
	{
		if(book2[i]!=0)
		{
			book3[j]=book2[i];//将出现的字母个数按照该字母对应的位置存放到新的数组中
			j++;
		}
	}
	BubbleSort(book3,j);//对新的数组元素排序    从小到大排
	maxn=book3[j-1];//最后一个元素为出现次数最多的
	minn=book3[0];//第一个元素为出现次数最少的
	int num=maxn-minn;
	if(IsPrimer(num))//是质数
	{
		printf("Lucky Word\n");
		printf("%d\n",num);
	}
	else//不是质数
	{
		printf("No Answer\n");
		printf("%d\n",0);
	}
	system("pause");
	return 0;
}
}

这道题本来就不是很难,但我做了好几遍系统都没有编译通过,最后下载了测试之后才发现如果结果是No Answer的话输出的第二行就是0,一直都以为是maxn-minn,导致系统一直给我扣分,个人感觉这个题目没有说清楚.

你可能感兴趣的:(字符串的处理)