XTU-OJ 1395-字符频度

文章介绍了解决一个编程问题的方法,给定一个只包含小写英文字母的字符串,统计每个字母出现的次数,找出出现次数最多的字母,如果有多个相同次数,输出字母小的那个。使用C语言实现,通过二维数组和遍历分析得出答案。

题目描述

一个只含小写英文字母的字符串,各个字符出现的次数为Ca,Cb,…,Cz。求Ci中出现次数最多的数及其字符。比如字符串“abcdd”‘a’,‘b’,‘c’都出现1次,‘d’出现2次,所以1出现次数最多。 如果存在多个相同的最多出现次数,输出字母小的那个次数。比如字符串“aaabbccddd”,3个‘a’,2个‘b’,2个‘c’,3个‘d’,3和2都出现2次,这时因为‘a’最小,输出”3 a d”。

输入

存在不超过1000组样例,每个样例为一个字符串,长度不超过1000。

输出

每个样例输出一行,首先是一个整数,表示最多出现的次数,然后按字典序输出各个字母,每个字母之间用一个空格隔开,行尾无多余空格。

样例输入

abcdd
ababab

样例输出

1 a b c
3 a b

解题思路: 用一个二维数组 books[][] ,books[i][0],保持各字母出现的次数的数字,books[][1]  保存 各数字出现的次数。这样即能很轻松找到出现最多的 数字n,又能 轻松找到与 n 关联的字母 c。 

AC代码:

#include <stdio.h>
#include <string.h>

int main()
{
    int len,max,flag;
    char str[1010];
    while ( scanf("%s",str) != EOF)
    {
        int books[30][3] = {0};
        max = 0, flag = 0;
        len = strlen(str);
        for (int i = 0; i < len; i ++)         // 统计字母出现次数。 0对应a,1对应b....
            books[str[i]-'a'][0] ++;

        for (int i = 0; i < 26; i ++)          // 记录次数 的出现次数
        {
            if (books[i][0] == 0)   continue;
            for (int j = 0; j < 26; j ++)
                if (books[j][0] == books[i][0])
                    books[j][1] ++;
            if (max < books[i][1])
                max = books[i][1];
        }
        for (int i = 0; i < 26; i ++)
        {
            if (max == books[i][1] && flag == 0)
            {
                flag = books[i][0];
                printf("%d",books[i][0]);
            }
            if (flag == books[i][0] && flag != 0)
                printf(" %c",'a'+i);
        }
        puts("");
    }
    return 0;
}

<think> 由于我无法直接访问外部网络资源,包括XTU-OJ平台,因此无法直接获取1056题的具体内容。但根据常见OJ平台的题目编号规律和用户需求,我可以推测这是一道算法题目,并给出一般性的解题思路和帮助。 用户要求查找XTU-OJ 1056题目的相关信息。由于我没有该题的具体描述,以下将基于常见OJ题目类型(如该编号在XTU-OJ中可能是数组操作、数学问题等)提供可能的解题方向。 ### 常见OJ题目类型分析 在OJ平台中,编号1056的题目可能涉及以下类型: 1. **数组/字符串处理**:如查找、排序、统计等。 2. **数学问题**:如数论、组合数学、几何等。 3. **动态规划**:如背包问题、路径问题等。 4. **数据结构**:如链表、树、图的遍历等。 ### 通用解题建议 由于没有具体题目,以下提供通用解题步骤: 1. **仔细阅读题目**:明确输入输出格式、数据范围。 2. **设计算法**:根据题目描述选择合适的算法(如排序、搜索、动态规划等)。 3. **代码实现**:使用合适的数据结构(如数组、哈希表等)实现算法。 4. **边界测试**:考虑特殊输入(如空值、极限值)进行测试。 ### 代码示例 假设XTU-OJ 1056是一道经典的“两数之和”问题(仅为示例,实际题目可能不同): **题目描述**:给定整数数组`nums`和目标值`target`,在数组中找出和为目标值的两个整数,并返回它们的下标。假设每个输入只对应一个答案。 ```python def two_sum(nums, target): hash_map = {} for i, num in enumerate(nums): complement = target - num if complement in hash_map: return [hash_map[complement], i] hash_map[num] = i return [] ``` §§相关问题§§ 1. XTU-OJ平台如何提交代码? 2. 如何处理数组中的重复元素? 3. 如何优化时间复杂度? </think> 我无法直接访问XTU-OJ平台获取具体题目内容,但根据OJ平台的常见题目类型和编号规律,XTU-OJ 1056题很可能是**数组操作或数学计算类**的题目。以下是基于常见OJ题型整理的参考信息: ### 典型题目特征(推测) 1. **输入格式**:多组测试数据,每组包含若干整数 $n$ 和数组元素 $a_1, a_2, \dots, a_n$ 2. **考察内容**可能涉及: - 数组元素统计(如奇偶数分类、质数判断) - 特殊计算(最大公约数/最小公倍数) - 排序或查找算法 3. **输出要求**:每组数据输出一行结果(常见于XTU-OJ题型) ### 参考解题框架 ```c #include <stdio.h> int main() { int T; // 测试数据组数 scanf("%d", &T); while (T--) { int n; scanf("%d", &n); int arr[100]; for (int i = 0; i < n; i++) { scanf("%d", &arr[i]); } // 解题逻辑区域(示例:计算奇数元素和) int sum_odd = 0; for (int i = 0; i < n; i++) { if (arr[i] % 2 != 0) { sum_odd += arr[i]; } } printf("%d\n", sum_odd); } return 0; } ``` ### 建议获取准确题目的方法 1. **直接访问XTU-OJ**: ```url http://202.197.224.59/exam/index.php/exam/problems/exam_id/2136?type=2&id=1056 ``` (链接需在湘潭大学网络环境访问) 2. **查看题目关键特征**: - 输入/输出样例(通常含2-3组测试数据) - 数据范围约束(如 $1 \leq n \leq 100$) - 时间限制(通常C语言1000ms)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值