纪念首次撸出来的编程题--2020深信服软件测试岗

题目描述
输入一个8位数字和指定剔除的位数,将剩余数字从大到小打印。若不符合要求则打印error
如:输入95137462 2,则输出9764321
如:输入95137462 9, 则输出error
如:输入95137462123 1 则输出error

代码写的比较啰嗦,还可以再简化,第一次调试成功,仅仅就想纪念一下

#include<stdio.h>
#include<stdlib.h>

int cmp(const void* a, const void* b)
{
    
    
    return *(int*)b - *(int*)a;
}


int main(void)
{
    
    
    int num, n;
    scanf("%d %d", &num, &n);

    if (n < 1 || n > 8)
    {
    
    
        printf("error");
        return 0;
    }


    int* arr = (int*)calloc(8, sizeof(int));
    for (int i = 0; i < 8; i++)
    {
    
    
        arr[i] = num % 10;
        num = num / 10;
    }
    if (num != 0)
    {
    
    
        printf("error");
        return 0;
    }
    int* arrr = (int*)calloc(8, sizeof(int));
    for (int i = 0, j = 7; i < 8, j >= 0; ++i, --j)
    {
    
    
        arrr[i] = arr[j];
    }



    int* arrs = (int*)calloc(7, sizeof(int));
    int k = 0;
    for (int i = 0; i < n - 1; i++)
    {
    
    
        arrs[k++] = arrr[i];
    }
    for (int i = n; i < 8; i++)
    {
    
    
        arrs[k++] = arrr[i];
    }

    qsort(arrs, 7, sizeof(int), cmp);

    for (int j = 0; j < 7; j++)
    {
    
    
        printf("%d", arrs[j]);
    }




    return 0;
}

猜你喜欢

转载自blog.csdn.net/shiwujigegea/article/details/108520177