找出一个字符串中出现次数最多的一个字符 找出重复签到的同学

发布时间 2023-11-16 19:08:12作者: 鸢凛

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);
        }
    }
}