暑假超越计划练习题(6)

简介: 暑假超越计划练习题(6)

今日,笔者又刚刚练习了两道题,想波不急待的分享一下了!


1.有序序列插入一个整数:有序序列插入一个整数_牛客题霸_牛客网 (nowcoder.com)


2.序列中删除指定数字:序列中删除指定数字_牛客题霸_牛客网 (nowcoder.com)


1.有序序列插入一个整数


有一个有序数字序列,从小到大排序,将一个新输入的数插入到序列中,保证插入新数后,序列仍然是升序。


输入描述:

第一行输入一个整数N(0≤N≤50)。


第二行输入N个升序排列的整数,输入用空格分隔的N个整数。


第三行输入想要进行插入的一个整数。


输出描述:

输出为一行,N+1个有序排列的整数。


示例1

输入:


5

1 6 9 22 30

8


输出:


1 6 8 9 22 30

下面请看笔者的代码:(错误)谨慎选择!仅供读者参考分析!


#include <stdio.h>
int main()
{
    int arr[50]={0};
    int n=0;
    scanf("%d",&n);
    int i=0;
    for(i=0;i<n;i++)
    {
        scanf("%d",&arr[i]);
    }
    int k=0;
    scanf("%d",&k);
    int j=0;
    for(i=0;i<n;i++)
    {
        j=i;
        if(arr[j]<k)
        {
            printf("%d ",arr[j]);
        }
        else
        {
            printf("%d ",k);
            break;
        }
    }
    for(i=j;i<n;i++)
    {
        printf("%d ",arr[i]);
    }
    return 0;
}


对于该代码确实通过了牛客网的调试阶段,但是对于正式的提交却是……尴尬了!


0a2653c851af460fa595bd959398a8f1.png6de278e6d6694ce5bb08e7e842b7e74b.png


因此得出,笔者的代码还有稍微瑕疵!


笔者痛定思痛,最后想出了一个不错的代码,最后却是安然无恙的通过了,下面请看笔者的正确代码:


#include <stdio.h>
int main()
{
    int n = 0;
    int arr[51] = { 0 };
    int k = 0;
    int i = 0;
    scanf("%d", &n);
    for (i = 0; i < n; i++)
    {
        scanf("%d", &arr[i]);
    }
    scanf("%d", &k);
    for (i = n - 1; i >= 0; i--)
    {
        if (arr[i] > k)
        {
            arr[i + 1] = arr[i];
        }
        else
        {
            arr[i + 1] = k;
            break;
        }
    }
    if (i < 0)
    {
        arr[0] = k;
    }
    for (int i = 0; i < n + 1; i++)
    {
        printf("%d ", arr[i]);
    }
    return 0;
}

这段代码,笔者是从大的数字往前面比较的!若是比k值大,则进行arr[i+1},若小于等于k,则进行arr[i+1]=k 的操作!若是在整个数组中,都没有比k大的数字,则就是arr[0]=k,然后在输出整个n+1个元素!


则代码的运算结果为:


12c3b7f3f8814309a195c64f051d4445.png


2.序列中删除指定数字


描述

有一个整数序列(可能有重复的整数),现删除指定的某一个整数,输出删除指定数字之后的序列,序列中未被删除数字的前后位置没有发生改变。


数据范围:序列长度和序列中的值都满足 1 \le n \le 501≤n≤50


输入描述:

第一行输入一个整数(0≤N≤50)。


第二行输入N个整数,输入用空格分隔的N个整数。


第三行输入想要进行删除的一个整数。


输出描述:

输出为一行,删除指定数字之后的序列。


示例1

输入:


6

1 2 3 4 5 9

4

输出:


1 2 3 5 9

示例2

输入:


5

1 2 3 4 6

5



输出:

1 2 3 4 6

笔者的代码为:


#include <stdio.h>
int main()
{
    int n = 0;
    scanf("%d", &n);
    int arr[50] = { 0 };
    int i = 0;
    for (i = 0; i < n; i++)
    {
        scanf("%d", &arr[i]);
    }
    int k = 0;
    scanf("%d", &k);
    for (i = 0; i < n; i++)
    {
        if (arr[i] != k)
        {
            printf("%d ", arr[i]);
        }
    }
    return 0;
}


在这个题目里面,没有多少的难度,其实主要的还是在于:


for (i = 0; i < n; i++)
    {
        if (arr[i] != k)
        {
            printf("%d ", arr[i]);
        }
    }

这段代码的思维!


若arr[i] != k,则进  printf("%d ", arr[i]);  因此笔者觉得读者也应该能够看懂,并且理解清楚,所以就不做过多的讲解!


请看笔者的最后代码运行结果:


34e8d716411043c08c7ffba9fbba23de.png

到此暑假超越计划练习题(6),就已经结束!笔者坚持了六天!      


相关文章
|
6月前
|
存储 算法 Serverless
22年+21年 计算机能力挑战赛初赛C语言程序题 题解
22年+21年 计算机能力挑战赛初赛C语言程序题 题解
150 2
|
6月前
|
机器学习/深度学习 存储 算法
机器学习(西瓜书)简答题总结
机器学习(西瓜书)简答题总结
46 0
|
算法 搜索推荐 程序员
程序员会使用的十个基础算法
作为一名程序员,掌握各种算法可以帮助我们解决各种复杂的问题,提高代码的效率和性能,同时也是面试中常被考察的重要内容之一。无论是开发新的软件应用、优化现有的算法逻辑还是解决各类计算问题,算法都是不可或缺的工具。因此,程序员必须掌握一系列常用的算法,以确保能够高效地编写出稳定、功能强大的软件。
|
人工智能 算法 C++
【每日算法Day 88】超越妹妹教你如何做这道排序题
【每日算法Day 88】超越妹妹教你如何做这道排序题
|
人工智能 搜索推荐 JavaScript
「数学天才」陶哲轩:GPT-4无法攻克一个未解决的数学问题,但对工作有帮助
「数学天才」陶哲轩:GPT-4无法攻克一个未解决的数学问题,但对工作有帮助
195 0
暑假超越计划练习题(2)
暑假超越计划练习题(2)
95 0
暑假超越计划练习题(2)
|
C语言
暑假超越计划练习题
暑假超越计划练习题
91 0
暑假超越计划练习题
暑假超越计划练习题(3)
暑假超越计划练习题(3)
99 0
暑假超越计划练习题(3)
|
存储
暑假超越计划练习题(8)
暑假超越计划练习题(8)
98 0
暑假超越计划练习题(8)
|
C语言
暑假超越计划练习题(4)
暑假超越计划练习题(4)
94 0
暑假超越计划练习题(4)