编程题

Posted atsap

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了编程题相关的知识,希望对你有一定的参考价值。

编程题

题目的要求是编写一个程序,输入满足以下语法要求的一段文字,输出运行后的结果。
输入:
整数 钱包 等于 零
钱包 增加 四
钱包 减少 三
看看 钱包
输出:

如上,需要我们和平常不一样的用中文输入和输出,因此我需要能把中文转化成数字和把数字转化成中文,还要能识别一些关键字,进行相应的运算。
我忽略了整数、钱包,看看这些词语。
查阅资料发现一个汉字占两个字节,然后我用char数组里连续的两个变量来储存一个汉字,数组的最后加上;
只用了简单的循环来控制12个字符串输入结束;
用strcmp来比较输入的汉字是否与“增加”,“减少”,“等于”的其中一个相同,进行对应的处理;
然后把输入的数字分成三类:一个,两个,或三个汉字组成,编写了三个函数分别处理它们,返回对应的阿拉伯数字,进行加、减或赋值运算;
最后把得到的阿拉伯数字用另一个函数转化成汉字并直接输出。
因为太菜并且时间也有限(其实是自己一直拖),并没有到考虑输入不规范的情况...所以符合这些条件代码才能用:一定要有十二个用空格或换行符间隔开的字符串,字符串的长度不超过四个汉字,存在“增加”,“减少”,“等于”和零到一百的数字(不包括一百)的关键字,赋值,加减后的结果也不能超过100,并且数字要紧跟在“增加”,“减少”,“等于”后面。如果没有进行赋值,也默认初始为0。

运行结果(截图高糊就不放了):

整数 钱包 等于 零
钱包 增加 三
钱包 减少 三
看看 钱包

整数 钱包 等于 一
钱包 增加 三十五
钱包 减少 二十二
看看 钱包
十四

整数 口袋 等于 零
口袋 增加 三
口袋 减少 二
康康 口袋

全部代码如下:

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
char zero[] = "零",
one[] = "一",
two[] = "二",
three[] = "三",
four[] = "四",
five[] = "五",
six[] = "六",
seven[] = "七",
eight[] = "八",
nine[] = "九",
ten[] = "十";
void output(int i);
int Cn_translator(char* s);
int Cn_translator1(char* s);
int Cn_translator2(char* s);
int Cn_translator3(char* s);
int main()
{
    char word[10];
    
    char op1[] = "等于",
        op2[] = "增加",
        op3[] = "减少";
    int i;
    int money = 0;
    for (i = 0;i < 12;i++)
    {
        fflush(stdin);
        scanf("%s", word);
        if (strcmp(word, op1) == 0)
        {
            scanf("%s", word);
            i += 1;
            money = Cn_translator(word);
        }
        else
        if (strcmp(word, op2) == 0)
        {
            scanf("%s", word);
            i += 1;
            money+= Cn_translator(word);
        }
        else
        if (strcmp(word, op3) == 0)
        {
            scanf("%s", word);
            i += 1;
            money-= Cn_translator(word);
        }

    }
    
    output(money);
    return 0;
}
int Cn_translator(char* s)
{
    if (strlen(s) == 2) 
    {
        return  Cn_translator1(s);
    }
    else
    if (strlen(s) == 4)
    {
        return  Cn_translator2(s);
    }
    else
    if (strlen(s) == 6)
    {
        return  Cn_translator3(s);
    }
}
int Cn_translator1(char* s)
{
    if (strcmp(s, zero) == 0)
        return 0;
    if (strcmp(s, one) == 0)
        return 1;
    if (strcmp(s, two) == 0)
        return 2;
    if (strcmp(s, three) == 0)
        return 3;
    if (strcmp(s, four) == 0)
        return 4;
    if (strcmp(s, five) == 0)
        return 5;
    if (strcmp(s, six) == 0)
        return 6;
    if (strcmp(s, seven) == 0)
        return 7;
    if (strcmp(s, eight) == 0)
        return 8;
    if (strcmp(s, nine) == 0)
        return 9;
    if (strcmp(s, ten) == 0)
        return 10;
}
int Cn_translator2(char* s)
{
    int m=0;
    int i,j;
    char k[3];   
    for (i = 0,j=10;i < 4;i += 2,j/=10)
    {
        k[0] = s[i];
        k[1] = s[i+1];
        k[2] = '';
        
        if(strcmp(k, one) == 0)
            m += 1;
        if(strcmp(k, two) == 0)
            m += (2 * j);
        if(strcmp(k, three) == 0)
            m += (3 * j);
        if (strcmp(k, four) == 0)
            m += (4 * j);
        if (strcmp(k, five) == 0)
            m += (5 * j);
        if (strcmp(k, six) == 0)
            m += (6 * j);
        if (strcmp(k, seven) == 0)
            m += (7 * j);
        if (strcmp(k, eight) == 0)
            m += (8 * j);
        if (strcmp(k, nine) == 0)
            m += (9 * j);
        if(strcmp(k, ten) == 0)
            m += 10;
        
    }
       return (m);
}
int Cn_translator3(char* s) 
{
    int m = 0;
    int i, j;
    char k[3];   
    for (i = 0, j = 10;i < 6;i += 2, j /= 10)
    {
        k[0] = s[i];
        k[1] = s[i + 1];
        k[2] = '';
        i += 2;
        if (strcmp(k, one) == 0)
            m += 1;
        if (strcmp(k, two) == 0)
            m += (2 * j);
        if (strcmp(k, three) == 0)
            m += (3 * j);
        if (strcmp(k, four) == 0)
            m += (4 * j);
        if (strcmp(k, five) == 0)
            m += (5 * j);
        if (strcmp(k, six) == 0)
            m += (6 * j);
        if (strcmp(k, seven) == 0)
            m += (7 * j);
        if (strcmp(k, eight) == 0)
            m += (8 * j);
        if (strcmp(k, nine) == 0)
            m += (9 * j);
        
    }
    return (m);
}
void output(int i)
{
    int a, b;
    char money0[7] = { 0 };
    a = i % 10;
    b = i / 10;
    if (b != 0)
    {
        if (b != 1)
        {
            if (b == 2)
                strcat(money0, two);
            if (b == 3)
                strcat(money0, three);
            if (b == 4)
                strcat(money0, four);
            if (b == 5)
                strcat(money0, five);
            if (b == 6)
                strcat(money0, six);
            if (b == 7)
                strcat(money0, seven);
            if (b == 8)
                strcat(money0, eight);
            if (b == 9)
                strcat(money0, nine);

        }
        strcat(money0, ten);
    }
    if (a != 0)
    {
        if (a == 1)
            strcat(money0, one);
        if (a == 2)
            strcat(money0, two);
        if (a == 3)
            strcat(money0, three);
        if (a == 4)
            strcat(money0, four);
        if (a == 5)
            strcat(money0, five);
        if (a == 6)
            strcat(money0, six);
        if (a == 7)
            strcat(money0, seven);
        if (a == 8)
            strcat(money0, eight);
        if (a == 9)
            strcat(money0, nine);
     }
    
    if (a == 0 && b == 0)
        strcat(money0, zero);
    printf("%s", money0);
}

以上是关于编程题的主要内容,如果未能解决你的问题,请参考以下文章

VSCode自定义代码片段9——JS中的面向对象编程

使用 Pygments 检测代码片段的编程语言

面向面试编程代码片段之GC

如何在 Django Summernote 中显示编程片段的代码块?

以编程方式将按钮添加到片段

前端面试题之手写promise