zoukankan      html  css  js  c++  java
  • 2018华为暑期实习

    2018华为实习

    1. 第一题

    给你一个原始字符串,根据该字符串内每个字符出现的次数,按照ASCII码递增顺序重新调整输出。

    举例!假设原始字符串为:
    eeefgghhh
    则每种字符出现的次数分别是:
    (1).eee 3次
    (2).f 1次
    (3).gg 2次
    (4).hhh 3次
    重排输出后的字符串如下:
    efghegheh
    编写程序,实现上述功能。
    【温馨提示】
    (1).原始字符串中仅可能出现“数字”和“字母”;
    (2).请注意区分字母大小写。

    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    
    #define MAXLINE 1024
    int main()
    {
        char str[MAXLINE+1] = {0};
        int ind[62] = {0};
        int i = 0, j = 0, len = 0;
        while((i = getchar()) != EOF && i!='
    ') {
            str[len++] = i;
            if(i>='0' && i<='9') {
                ind[i-'0']++;
            }
            if(i>='A' && i<='Z') {
                ind[i-'A'+10]++;
            }
            if(i>='a' && i<='z') {
                ind[i-'a'+36]++;
            }
        }
    
        for(i = 0; i<len; i++){
            for(j = 0; j<62; j++) {
                if(ind[j]>0) {
                    printf("%c", j>=36?j-36+'a':(j>=10? j-10+'A':j+'0'));
                    ind[j]--;
                }
            }
        }
    
        return 0;
    }
    1. 第二题

    给出一组正整数,你从第一个数向最后一个数方向跳跃,每次至少跳跃1格,每个数的值表示你从这个位置可以跳跃的最大长度。计算如何以最少的跳跃次数跳到最后一个数。

    输入描述:
    第一行表示有多少个数n
    第二行开始依次是1到n个数,一个数一行
    输出描述:
    输出一行,表示最少跳跃的次数。

    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    
    #define MAXLINE 1024
    
    int ministep(int num[], int left, int right)
    {
        if(left == right-1) {
            return 1;
        }
        int i = 0; 
        int step = right-left;
        int index = right;
        int tmp = 0;
        for(i = right-1; i>=left; i--) {
            if(num[i] >= right-i) {
                tmp = ministep(num, left, i);
                if(tmp+1 < step) {
                    step = tmp+1;
                    index = i;
                }
            }
        }
    
        return step;
    
    }
    int main()
    {
        int n = 0;
        int i = 0;
        int step = 0;
        int *num = NULL;
        //int tmp = 0;
    
        scanf("%d", &n);
        if(n==0) {
            step = 0;
            printf("%d
    ", step);
    
            return 0;
        }
    
        num = (int*)malloc(n*sizeof(int));
    
        for(i = 0; i<n; i++) {
            scanf("%d", num+i);
        }
        step = ministep(num, 0, n-1);
    
        printf("%d
    ", step);
    
        return 0;
    }
    1. 第三题

    任意位数整数A和B相乘

    #include<stdio.h>
    #include<string.h>
    #include<malloc.h>
    
    
    #define Int(X) (X - '0') /**************/
    
    int *multi_big_integer(const char *, const char *);
    int check_num(const char *);
    
    int main(void)
    {
        char num1[100] = {''}, num2[100] = {''};
        while(scanf("%s%s", num1, num2) != EOF)
        {
            int *result = NULL;
            int i, change = 0;
    
            if(strlen(num1) > 100 || strlen(num2) > 100)
            {
                return 1;
            }
    
            if(check_num(num1) || check_num(num2))
            {
                return 1;
            }
    
    
            result = multi_big_integer(num1, num2);
    
    
            for(i = 1; i <= result[0]; i++)
            {
                if(result[i] != 0) 
                    change = 1;
                if(!change)
                {
                    if(i > 1)        
                        {             
                            printf("0");
                            break;
                        }
                    continue;
                }
                printf("%d", result[i]);
            }
            printf("
    ");
        }
        return 0;
    } 
    
    
    int check_num(const char *num)
    {
        int i;
        for(i = 0; (size_t)i < strlen(num); i++)
        {
            if(num[i] < '0' || num[i] > '9')
            {
                return 1;
            }
        }
        return 0;
    }
    
    int *multi_big_integer(const char *num1, const char *num2)
    {
        int *result = NULL;               
        int num1Len = strlen(num1);      
        int num2Len = strlen(num2);      
        int resultLen;                    
        int i, j;                         
        resultLen = num1Len + num2Len;     
    
        result = (int *)malloc((resultLen+1)*sizeof(int));
        memset(result, 0, (resultLen+1)*sizeof(int));
    
        result[0] = resultLen; 
    
        for(j = 0; j < num2Len; j++)
        {
            for(i = 0; i < num1Len; i++)
            {
    
                result[i+j+2] += Int(num1[i]) * Int(num2[j]);
            }
        }
    
        for(i = resultLen; i > 1; i--)
        {
            result[i-1] += result[i]/10;
            result[i] = result[i]%10;
        }
    
        return result;
    }
    
  • 相关阅读:
    UML 类与类之间的关系
    HTTP协议基础
    LDAP介绍
    UML 类与类之间的关系
    我的桌面
    RoR的OO与敏捷[1][88250原创]
    Ubuntu7.10纯仿Leopard[00原创]
    37个我爱Ruby的理由
    在Ubuntu 7.10上安装Rails[00整理]
    RoR的OO与敏捷[1][88250原创]
  • 原文地址:https://www.cnblogs.com/born2run/p/9581348.html
Copyright © 2011-2022 走看看