蓝桥杯程序设计备赛(2024.1.15)

1470. 重新排列数组icon-default.png?t=N7T8https://leetcode.cn/problems/shuffle-the-array/        

int* shuffle(int* nums, int numsSize, int n, int* returnSize){
    *returnSize = numsSize;
    int* ret = (int*)malloc(sizeof(int)*numsSize);
    for(int i = 0;i<numsSize;i+=2){
        ret[i] = nums[i/2];
    }
    for(int i = 1;i<numsSize;i+=2){
        ret[i] = nums[(i-1)/2+numsSize/2];
    }
    return ret;
}
        这题的话因为题目要求返回一个数组,所以最开始的地方我们要去申请一个相对应的内存,以及返回所需要的returnSize。        
        然后就是遍历数组,把数字放到对应的位置。分别是奇数位置跟偶数位置,这样这题就写完了。

int* getConcatenation(int* nums, int numsSize, int* returnSize) {
    *returnSize = numsSize*2;
    int* ret = (int*)malloc(sizeof(int)*numsSize*2);
    for(int i = 0;i<numsSize;i++){
        ret[i] = nums[i];
        ret[i+numsSize] = nums[i];
    }
    return ret;
}

        这题的话,enmm,没什么特别难的地方。对指针解引用,申请返回的数组的内存。遍历数组,对ret数组进行赋值。

1920. 基于排列构建数组icon-default.png?t=N7T8https://leetcode.cn/problems/build-array-from-permutation/

int* buildArray(int* nums, int numsSize, int* returnSize) {
    *returnSize = numsSize;
    int* ret = (int*)malloc(sizeof(int)*numsSize);
    for(int i = 0;i<numsSize;i++){
        ret[i] = nums[nums[i]];
    }
    return ret;
}

这题也没什么好说的,解引用,然后申请内存,遍历赋值,返回。

int* runningSum(int* nums, int numsSize, int* returnSize){
    int sum = 0;
    *returnSize = numsSize;
    int* ret = (int*)malloc(sizeof(int)*numsSize);
    for(int i = 0;i<numsSize;i++){
        sum += nums[i];
        ret[i] = sum;
    }
    return ret;
}

        这题的话,最主要的就算能够看出新数组的下标为i的数据的值是0到i-1的和再加上i的值,所以就需要一个值来储存前面的值。

        LCR 182. 动态口令icon-default.png?t=N7T8https://leetcode.cn/problems/zuo-xuan-zhuan-zi-fu-chuan-lcof/

char* dynamicPassword(char* password, int target) {
    int i;
    int len = strlen(password);
    char *ans = (char *)malloc(sizeof(char)*(len+1));
    for(i = 0;i<len;i++){
        if(i<target){
            ans[len - target + i] = password[i];
        }else{
            ans[i-target] = password[i];
        }
    }
    ans[len] = '\0';
    return ans;
}

        这题的话,首先我们要得到字符串的长度,然后还是申请相对应的内存,遍历。这个时候的遍历我们要分为两个部分,第一个部分是我们要移到最后的字符,另一部分是往前面移的字符。

        注意:申请内存的时候别忘了给‘\0’申请一个位置,因为如果要printf("%s")来输出字符的话,只有最后一个是‘\0‘才能够正常的打印出字符串。

LCR 122. 路径加密icon-default.png?t=N7T8https://leetcode.cn/problems/ti-huan-kong-ge-lcof/

char* pathEncryption(char* path) {
    int len = strlen(path);
    char* ret = (char*)malloc(sizeof(char)*(len+1));
    for(int i = 0;i<len;i++){
        if(path[i] == '.') ret[i] = ' ';
        else ret[i] = path[i];
    }
    ret[len] = '\0';
    return ret;
}

        啧,这题就是遍历的时候加个判断,判断一下是不是.,如果是.,那就换成空格。

        emmm,因为这几天在写二维数组跟二级指针的题目,这些题目我写起来比较吃力,这篇还是我在1.14的晚上十一点三十七写完的。可能偶尔会缺一两天吧,那些东西我也需要消化一下,希望你们能谅解。

  • 21
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

他乡明月.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值