• 1044. 火星数字(20)


    原题: https://www.patest.cn/contests/pat-b-practise/1044

    思路: 首先解决读取一行数据的问题, 我在这里使用的是%[^ ]. 再配合
    sscanf把字符串或者数字提取出来.

    接下来就要对拿到的数据进行正确分类, 我的分类是

    1. 数字0
    2. 数字小于13
    3. 数字大于13并且是13的整数倍
    4. 数字大于13并且不是13的整数倍
    5. 字符串tret
    6. 字符串是2位数
    7. 字符串是1位数

    实现:

    #include <stdio.h>
    #include <string.h>
    
    #define LEN 20
    char unit[LEN][LEN] = {
        "tret", "jan", "feb", "mar", "apr", "may", "jun", "jly", "aug", "sep", "oct", "nov", "dec"
    };
    char ten[LEN][LEN] = {
        "tret", "tam", "hel", "maa", "huh", "tou", "kes", "hei", "elo", "syy", "lok", "mer", "jou",
    };
    
    int getUnit (char str[]);
    int getTen (char str[]);
    
    int main (void) {
        int dec = 13;   // 进制
        int n;
        char tmp[LEN];  // 存储一行字符串
        int num;        // 保存数字
        char str1[LEN]; // 火星字符串1
        char str2[LEN]; // 火星字符串2
        int i;
    
        scanf("%d", &n);
        getchar(); // 挡掉Enter
        for (i = 0; i < n; i++) {
        	num = 0;
            scanf("%[^
    ]", tmp);
            getchar(); // 挡掉Enter
            if (tmp[0] >= '0' && tmp[0] <= '9') {
                sscanf(tmp, "%d", &num); // 从字符串里提取数字
                if (num == 0) {
                    printf("tret
    ");
                } else if (num < dec) {
    				printf("%s
    ", unit[num]);			
    			} else if (num / dec != 0 && num % dec == 0) {
                    printf("%s
    ", ten[num / dec]);
                } else {
                    printf("%s %s
    ", ten[num / dec], unit[num % dec]);
                }
            } else if (strcmp(tmp, "tret") == 0) {
                printf("0
    ");
            } else if (strlen(tmp) > 6) {
                sscanf(tmp, "%s %s", str1, str2);
                num += getTen(str1) * dec;
                num += getUnit(str2);
                printf("%d
    ", num);
            } else {
                if (getTen(tmp) != -1) {
                    num = getTen(tmp) * 13;
                    printf("%d
    ", num);
                } else {
                    num = getUnit(tmp);
                    printf("%d
    ", num);
                }
            }
        }
    
    	return 0;
    }
    
    int getTen (char str[]) {
        int i;
        for (i = 0; i < 13; i++) {
            if (strcmp(str, ten[i]) == 0) return i;
        }
        return -1;
    }
    
    int getUnit (char str[]) {
        int i;
        for (i = 0; i < 13; i++) {
            if (strcmp(str, unit[i]) == 0) return i;
        }
        return -1;
    }
    
    
  • 相关阅读:
    node=day5
    封装异步API
    form表单的name作用
    关于app.use('/static', express.static(path.join(__dirname, 'public')))的理解
    node=day4
    PS切片
    WPF SDK研究 之 数据绑定
    C# WPF DataGrid控件实现三级联动
    wpf中的样式与模板
    WPF : ListBox的几种Template属性
  • 原文地址:https://www.cnblogs.com/asheng2016/p/7987986.html
Copyright © 2020-2023  润新知