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


    笔者开头感想:现如今,暑假已经过大半部分,但是随着时间流逝,笔者的C语言仍没有多大的起色,日新月急,但是没有办法,思前想后,笔者决定对于之前所学的内容进行一下回顾复习!因此刷题是必须的,所以笔者将最近做过的习题,将会在此整理一遍,重新整理成为一个C语言练习题集册,笔者也会将最近书写过的习题,统一归纳到该C语言练习题集册里面,供笔者借鉴参考!
     

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

    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

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

    1. #include <stdio.h>
    2. int main()
    3. {
    4. int arr[50]={0};
    5. int n=0;
    6. scanf("%d",&n);
    7. int i=0;
    8. for(i=0;i<n;i++)
    9. {
    10. scanf("%d",&arr[i]);
    11. }
    12. int k=0;
    13. scanf("%d",&k);
    14. int j=0;
    15. for(i=0;i<n;i++)
    16. {
    17. j=i;
    18. if(arr[j]<k)
    19. {
    20. printf("%d ",arr[j]);
    21. }
    22. else
    23. {
    24. printf("%d ",k);
    25. break;
    26. }
    27. }
    28. for(i=j;i<n;i++)
    29. {
    30. printf("%d ",arr[i]);
    31. }
    32. return 0;
    33. }

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

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

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

    1. #include <stdio.h>
    2. int main()
    3. {
    4. int n = 0;
    5. int arr[51] = { 0 };
    6. int k = 0;
    7. int i = 0;
    8. scanf("%d", &n);
    9. for (i = 0; i < n; i++)
    10. {
    11. scanf("%d", &arr[i]);
    12. }
    13. scanf("%d", &k);
    14. for (i = n - 1; i >= 0; i--)
    15. {
    16. if (arr[i] > k)
    17. {
    18. arr[i + 1] = arr[i];
    19. }
    20. else
    21. {
    22. arr[i + 1] = k;
    23. break;
    24. }
    25. }
    26. if (i < 0)
    27. {
    28. arr[0] = k;
    29. }
    30. for (int i = 0; i < n + 1; i++)
    31. {
    32. printf("%d ", arr[i]);
    33. }
    34. return 0;
    35. }

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

    则代码的运算结果为:

     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

    笔者的代码为:

    1. #include <stdio.h>
    2. int main()
    3. {
    4. int n = 0;
    5. scanf("%d", &n);
    6. int arr[50] = { 0 };
    7. int i = 0;
    8. for (i = 0; i < n; i++)
    9. {
    10. scanf("%d", &arr[i]);
    11. }
    12. int k = 0;
    13. scanf("%d", &k);
    14. for (i = 0; i < n; i++)
    15. {
    16. if (arr[i] != k)
    17. {
    18. printf("%d ", arr[i]);
    19. }
    20. }
    21. return 0;
    22. }

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

    1. for (i = 0; i < n; i++)
    2. {
    3. if (arr[i] != k)
    4. {
    5. printf("%d ", arr[i]);
    6. }
    7. }

    这段代码的思维!

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

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


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

     

  • 相关阅读:
    互联网后端技术大全!
    力扣(LeetCode)41. 缺失的第一个正数(C++)
    C++操作ZEROMQ
    【JVM】优化参数+优化工具+优化实例
    【深度学习】实验08 TensorBoard案例
    3.2 自定义函数
    第二章 Servlet生命周期 ② 代码
    Perl语言基础概念、基本语法
    Reids存储邮箱验证码
    Mariadb数据库
  • 原文地址:https://blog.csdn.net/weixin_64308540/article/details/126442700