7-2 找出一个字符串中出现次数最多的一个字符
找出一个字符串中出现次数最多的一个字符。
输入格式:
给出一个字符串,字符串的长度不大于10^6,不区分大小写, 字符串中可能包含'A'-'Z','a'-'z',' '字符。
输出格式:
分别输出出现最多次数的字符(如果为字母,输出小写字母),出现的次数,用一个空格分隔,如果有字符出现次数相同的输出较小的字符。行末尾无多余空格和换行
输入样例:
abcdefghijklmnopqrstuvwxyzA
输出样例:
a 2
解题思路:
1.先读入需要判断的字符串,循环判断字符串是否属于'a'到'z'或‘A’到'Z'之间,根据ASCII码进行存储。如:'a'-'a'=0,count['a'-'a']便用来存储'a'出现的次数
2.判断完成之后,找出数组count[]中最大的,即出现次数最多的字母,将其和出现的次数一起输出。
#include<stdio.h> int main(){ char str[1000000] = {""}; int i,j; scanf("%s",&str); int count[26] = {0}; for(i=0;i<1000000;i++){ if(str[i]==""){ break; }else{ char a = str[i]; if(a>='A'&&a<='Z'){ count[a-'A']++; } if(a>='a'&&a<='z'){ count[a-'a']++; } } } int max = 0; int index = 0; for(i=0;i<26;i++){ if(count[i]>max){ max = count[i]; index = i; } } printf("%c %d",('a'+index),count[index]); }
7-6 签到 找出重复签到的同学
找出签到数据中重复签到的同学
输入格式:
[1, 2, 2, 3, 4, 5, 4],数字表示收集的签到的学生的学号
输出格式:
2 4
输出重复签到的学生学号,从小到大输出,数字后面有一个空格符
输入样例:
在这里给出一组输入。例如:
[1, 2, 2, 3, 4, 5, 4]
输出样例:
在这里给出相应的输出。例如:
2 4
解题思路:
1.通过观察输入的数据,可以发现,在'[',' '符号后会输入我们所需的学生学号,所以我们可以在程序中进行判断,即当这次获得的字符为'['或' '时,对下一次读入的数据进行判断。(程序中的index的状态用来实现以上逻辑)
2.除了index外,还需要多加一个判断,通过观察输入数据可知,除符号 '[' , ']' , ',' , ' ' 外的输入均为学生学号,即判断本次获得的字符在不是'['和' ',且index=1的情况下,该输入为数字,则可以用来进行记录。
3.程序中有使用count用来记录学号的个数,在输出时的for循环的结束判断是i<count,但是提交时出现答案错误,后来考虑到学号会大于输入学号的个数,所以将循环改为遍历整个数组,输出学号出现次数大于1的学号,则答案正确。
#include<stdio.h> int main(){ int index = 1; int record[100000] = {0}; char get = getchar(); int count = 0; while(get!=']'){ get = getchar(); if(get == '['||get == ' '){ index = 1; } else { if (index) { int i = get - '0'; record[i]++; count++; index = 0; } } } for(int i=1;i<100000t;i++){ if(record[i]>1){ printf("%d ",i); } } }
标签:count,index,找出,字符,签到,int,输出,字符串 From: https://www.cnblogs.com/lavendery/p/17836963.html