1042 字符统计 && 1038 统计同成绩学生 && 1028 人口普查 && 1066 图像过滤

请编写程序,找出一段给定文字中出现最频繁的那个英文字母。

输入格式:
输入在一行中给出一个长度不超过 1000 的字符串。字符串由 ASCII 码表中任意可见字符及空格组成,至少包含 1 个英文字母,以回车结束(回车不算在内)。

输出格式:
在一行中输出出现频率最高的那个英文字母及其出现次数,其间以空格分隔。如果有并列,则输出按字母序最小的那个字母。统计时不区分大小写,输出小写字母。

输入样例:
This is a simple TEST. There ARE numbers and other symbols 1&2&3…
输出样例:
e 7

#include<bits/stdc++.h>

using namespace std;

int main() {
    char a[1005];
    int z[26] = {0}; // 存放26个英文字母
    fgets(a, 1005, stdin);
    string s = a;
    for (int i = 0; i < s.size() - 1; i++) {
        if (a[i] >= 'A' && a[i] <= 'Z') {
        // 大写转小写
            a[i] = a[i] + 32;
        }
    }
    // 不排序也可以
    sort(a, a + s.size() - 1);
    for (int i = 0; i < s.size() - 1; i++) {
        if (a[i] >= 'a' && a[i] <= 'z') {
        // a-z  对应数组下标 0-25
            z[a[i] - 'a'] += 1;
        } else {
            continue;
        }
    }
    int max = 0; // 记录出现次数最多的
    int index;  // 记录最大值的下标
    for (int i = 0; i < 26; i++) {
        if (z[i] > max) {
            max = z[i];
            index = i;
        }
    }
    printf("%c %d", index + 'a', max);
    return 0;
}

-------------------------------------------------------------------------

本题要求读入 N 名学生的成绩,将获得某一给定分数的学生人数输出。

输入格式:
输入在第 1 行给出不超过 10
5
的正整数 N,即学生总人数。随后一行给出 N 名学生的百分制整数成绩,中间以空格分隔。最后一行给出要查询的分数个数 K(不超过 N 的正整数),随后是 K 个分数,中间以空格分隔。

输出格式:
在一行中按查询顺序给出得分等于指定分数的学生人数,中间以空格分隔,但行末不得有多余空格。

输入样例:
10
60 75 90 55 75 99 82 90 75 50
3 75 90 88
输出样例:
3 2 0

// 题目链接  https://pintia.cn/problem-sets/994805260223102976/exam/problems/994805284092887040
#include<bits/stdc++.h>
using namespace std;

#define N 100001
int arr[101] = {0};

int main(){
    int n,k,num;
    scanf("%d",&n);
    int score;
    for(int i=0;i<n;i++){
        scanf("%d",&score);
        arr[score] += 1;
    }
    scanf("%d",&k);
    for(int i=0;i<k;i++){
        scanf("%d",&num);
        printf("%d",arr[num]);
        if(i!=k-1){
            printf(" ");
        }
    }
    return 0;
}

-----------------------------------------------------------------------

某城镇进行人口普查,得到了全体居民的生日。现请你写个程序,找出镇上最年长和最年轻的人。

这里确保每个输入的日期都是合法的,但不一定是合理的——假设已知镇上没有超过 200 岁的老人,而今天是 2014 年 9 月 6 日,所以超过 200 岁的生日和未出生的生日都是不合理的,应该被过滤掉。

输入格式:
输入在第一行给出正整数 N,取值在(0,10 5 ];随后 N 行,每行给出 1 个人的姓名(由不超过 5 个英文字母组成的字符串)、以及按 yyyy/mm/dd(即年/月/日)格式给出的生日。题目保证最年长和最年轻的人没有并列。

输出格式:
在一行中顺序输出有效生日的个数、最年长人和最年轻人的姓名,其间以空格分隔。

输入样例:
5
John 2001/05/12
Tom 1814/09/06
Ann 2121/01/30
James 1814/09/05
Steve 1967/11/20
输出样例:
3 Tom John

// 题目链接  https://pintia.cn/problem-sets/994805260223102976/exam/problems/994805293282607104
#include<bits/stdc++.h>

using namespace std;

// 本题的最大生日是2014/9/6   最小生日是 1814/9/6

struct info {
    char name[6];
    char bir[20];
};

bool comp(info l, info r) {
    if (strcmp(l.bir, r.bir) < 0) {
        return true;
    } else {
        return false;
    }
}

int main() {
    int n;
    scanf("%d", &n);
    info arr[n];
    for (int i = 0; i < n; i++) {
        scanf("%s %s", arr[i].name, arr[i].bir);
    }
    int count = 0;
    for (int i = 0; i < n; i++) {
        if (strcmp(arr[i].bir, "1814/09/06") >= 0 && strcmp(arr[i].bir, "2014/09/06") <= 0) {
            count++;
        }
    }
    printf("%d", count);
    // 注意:  只有 有效数据时  才能打印输出,否则 测试点4通过不了
    if (count != 0) {
        sort(arr, arr + n, comp);
        for (int i = 0; i < n; i++) {
            if (strcmp(arr[i].bir, "1814/09/06") >= 0) {
                printf(" %s", arr[i].name);
                break;
            }
        }
        for (int i = n - 1; i >= 0; i--) {
            if (strcmp(arr[i].bir, "2014/09/06") <= 0) {
                printf(" %s", arr[i].name);
                break;
            }
        }
    }
    return 0;
}

-----------------------------------------------------------------------

图像过滤是把图像中不重要的像素都染成背景色,使得重要部分被凸显出来。现给定一幅黑白图像,要求你将灰度值位于某指定区间内的所有像素颜色都用一种指定的颜色替换。

输入格式:
输入在第一行给出一幅图像的分辨率,即两个正整数 M 和 N(0<M,N≤500),另外是待过滤的灰度值区间端点 A 和 B(0≤A<B≤255)、以及指定的替换灰度值。随后 M 行,每行给出 N 个像素点的灰度值,其间以空格分隔。所有灰度值都在 [0, 255] 区间内。

输出格式:
输出按要求过滤后的图像。即输出 M 行,每行 N 个像素灰度值,每个灰度值占 3 位(例如黑色要显示为 000),其间以一个空格分隔。行首尾不得有多余空格。

输入样例:
3 5 100 150 0
3 189 254 101 119
150 233 151 99 100
88 123 149 0 255
输出样例:
003 189 254 000 000
000 233 151 099 000
088 000 000 000 255

// 题目链接  https://pintia.cn/problem-sets/994805260223102976/exam/problems/994805266514558976
#include<bits/stdc++.h>

using namespace std;

int main() {
    int m, n, a, b, t;
    scanf("%d %d %d %d %d", &m, &n, &a, &b, &t);
    for (int i = 0; i < m; i++) {
        int arr[n];
        for (int j = 0; j < n; j++) {
            scanf("%d", &arr[j]);
        }
        for (int k = 0; k < n; k++) {
            if (arr[k] >= a && arr[k] <= b) {
                arr[k] = t;
            }
        }
        for (int l = 0; l < n; l++) {
            printf("%03d", arr[l]);
            if (l != n - 1) {
                printf(" ");
            }
        }
        if(i != m-1){
            printf("\n");
        }
    }
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值