Day 0x6 UVa10008 What's Cryptanalysis?

题意

  • 和上篇 Day 0x5 UVa10062 Tell me the frequencies! 有 87% 像
  • 输入一段文字,分析其 ASCII 与次数
  • 需要注意的点有:
    1. 单测资
    2. 输入的第一个数字 n 代表接下来的输入行数
    3. 每行输入可能含有多个字元 (包含空白)
    4. 输入的字母大小写视为同一字元
    5. 按照规则输出 字母 (大写) & 次数
      • 按照次数由大到小
      • 同样次数按照 ASCII 由小到大

解法

  • 读入代表後续行数的 n 後,要用 getchar()gets() 等方式滤掉换行符号,再开始 while 回圈存字串
    int n;
    char str[999] = {0};
    
    scanf("%d", &n);
    getchar();
    
    while(n--){
    
        gets(str);
        ...
    }
    
    return 0;
    
  • 每输入一字串,便用 for 回圈逐字元处理,因为输出都是大写,所以用 if 过滤出小写字母,透过 ASCII 的特性来存入计算次数的 count 阵列,其余字元 (包含空白、大写字母和其他) 直接计算次数即可
    for(i = 0; i < strlen(str); i++){
        if(str[i] >= 'a' && str[i] <= 'z'){
            count[str[i] - 'a' + 'A']++;
        }
        else{
            count[str[i]]++;
        }
    }
    
  • 输出按照规则,外层跑次数,内层跑大写字母,该字母有对应的次数便输出大写字母 & 次数。这边要特别注意外层回圈的起始,不能给 strlen(str),就留给大家思考罗~
    for(i = sizeof(str); i >= 1; i--){
        for(j = 'A'; j <= 'Z'; j++){
            if(count[j] == i){
                printf("%c %d\n", j, i);
            }
        }
    }
    
  • C code
    #include<stdio.h>
    #include<string.h>
    
    int main(){
    
        int n;
        char str[999] = {0};
        int count[91] = {0};
        int i, j;
    
        scanf("%d", &n);
        getchar();
    
        while(n--){
    
            gets(str);
    
            for(i = 0; i < strlen(str); i++){
                if(str[i] >= 'a' && str[i] <= 'z'){
                    count[str[i] - 'a' + 'A']++;
                }
                else{
                    count[str[i]]++;
                }
            }
        }
    
        for(i = sizeof(str); i >= 1; i--){
            for(j = 'A'; j <= 'Z'; j++){
                if(count[j] == i){
                    printf("%c %d\n", j, i);
                }
            }
        }
    
        return 0;
    }
    

<<:  Day 7 图片去背 ( 遮罩 )

>>:  D6(9/6)-永丰金(2890)

卡夫卡的藏书阁【Book7】- Kafka 实作新增 Topic

「不要屈服,不要淡化,不要使它看来合逻辑,不要依据潮流而修改你的灵魂。相反的,狠狠的追随你最强烈的...

DAY1-目录&说明

说明 演算法知识点繁多,利用30天的时间整理并总结,也更有系统的学习~~ 每篇文章将简述一个演算法或...

Day6 - 2D渲染环境基础篇 II [同场加映 - 非零缠绕与奇偶规则] - 成为Canvas Ninja ~ 理解2D渲染的精髓

路径绘制常令人感到疑惑的点 - 非零缠绕与奇偶规则 初学路径绘制的时候,大部分人应该会发现一种让人疑...

予焦啦!Golang 执行绪与作业系统执行绪

本节是以 Golang 上游 6a79f358069195e1cddb821e81fab956d9...