Q20 :百炼编号:2742 统计字符串
之前对字符串进行过处理,所以很快就有了思路,用一个26大小的数组来存储每个字母所出现的次数,数组的下标为对应的字母:如本题中使用的letterNum[26]
自己第一遍没有提交成功,错在的一位数组动态内存的分配上,没有很好的定义成功,忘记了给sizeof(int)乘以n,导致浪费了很长时间进行调试。
这道题的代码是:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
int i,n,len;
scanf("%d",&n);
// int a[n];
//int maxNum[n];
int *a=(int *)malloc(n*sizeof(int));
int *maxNum=(int *)malloc(n*sizeof(int));
int k=0;
char str[1001];
while(n--){
getchar();
gets(str);
len=strlen(str);
int letterNum[26]={0};
for(i=0;i<len;i++) //字母出现次数统计,初始都为0,每出现一次,进行加一一次。
{
letterNum[str[i]-'a']++;
}
maxNum[k]=letterNum[0];
a[k]=0;
for(i=0;i<26;i++)
{
if(letterNum[i]>maxNum[k])
{
maxNum[k]=letterNum[i];
a[k]=i;
}
}
k++;
}
for(i=0;i<k;i++)
printf("%c %d\n",a[i]+'a',maxNum[i]);
return 0;
}
Q21 :百炼编号:2975 最难的问题
这道题貌似之前做过,所以处理的速度还是很快,但是还是遇到了一些细节的问题,需要debug才能调出来
具体思路是:用字符串对输入的信息进行存储,提取字母并进行转换处理,其余非字母的字符按照原样存储,然后将处理后的结果放在字符串数组中,将结果显示出来即ok。
代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char str[201];
gets(str);
//getchar();
char output[101][201];
int i,len;
int j=0;
while(strcmp(str,"ENDOFINPUT")!=0)
{
if(strcmp(str,"START")!=0&&strcmp(str,"END")!=0)
{
//对有用字符进行处理并存储
len=strlen(str);
for(i=0;i<len;i++)
{
if(str[i]>=70&&str[i]<=90)
{
str[i]=str[i]-5;
//printf("%c\n",str[i]);
}
else if(str[i]>=65&&str[i]<=69)
str[i]=str[i]+21;
}
strcpy(output[j],str);
//printf("chulihou %s\n",str);
j++;
}
gets(str);
// printf("chulihouqian %s\n",str);
}
for(i=0;i<j;i++)
printf("%s\n",output[i]);
return 0;
}