• C++保姆级入门教程(10)—— 一维数组练习


    哈喽大家好,我是iecne,本期为大家带来的是CPP/C++保姆级入门教程的第⑩期—— 一维数组基础 ,包教包会,快来看看吧!

    此教程适合新手小白,因为语言会十分的通俗易懂,不会有很多的专业词汇出现,可以更好的掌握并且吸收,后续加上持之以恒的练习题目将会基本巩固


    目录

    一. 一维数组的意义

    二.习题练习

    1.小鱼比可爱

    题目描述

    参考答案

    题目思路

    2.小鱼的数字游戏

    题目描述

    参考答案

    题目思路

    3.冰雹猜想

    题目描述

    参考答案

    题目思路

    4.[NOIP2005 普及组]校门外的树

    题目描述

    参考答案

    题目思路

     三.总结

     系列文章目录


    一. 一维数组的意义

    计算机运算速度很快,一秒钟可以处理成千上万的数据。之前的例子都是读取一个数据后立刻对这些数据进行处理,然后再也不需要用到这些数据了;有时候,我们读入数据后还需要将这些数据保存下来,便于以后再次使用。如果保存个别几个数据,可以设立几个变量存储;但是如果要存储成千上万个数据,总不能定义成千上万个变量吧。

    既然可以通过循环语句来重复执行结构类似的语句,也有办法一次定义一组成千上万个的相同类型的变量——使用数组。这样就可以把大量的数据存储下来,随时使用了。数组不仅可以存储输入的数据,还能存下运算过程中的“半成品”甚至答案,是 C++ 中非常重要的一部分。


    二.习题练习

    1.小鱼比可爱

    题目描述

    人比人,气死人;鱼比鱼,难死鱼。小鱼最近参加了一个“比可爱”比赛,比的是每只鱼的可爱程度。参赛的鱼被从左到右排成一排,头都朝向左边,然后每只鱼会得到一个整数数值,表示这只鱼的可爱程度,很显然整数越大,表示这只鱼越可爱,而且任意两只鱼的可爱程度**可能一样**。由于所有的鱼头都朝向左边,所以每只鱼只能看见在它左边的鱼的可爱程度,它们心里都在计算,在自己的眼力范围内有多少只鱼不如自己可爱呢。请你帮这些可爱但是鱼脑不够用的小鱼们计算一下。

    输入格式

    第一行输入一个正整数n,表示鱼的数目。

    第二行内输入 n 个正整数,用空格间隔,依次表示从左到右每只小鱼的可爱程度ai。

    输出格式

    一行,输出 n 个整数,用空格间隔,依次表示每只小鱼眼中有多少只鱼不如自己可爱。

    样例 1

    样例输入 1

    ```
    6
    4 3 0 5 1 2
    ```

    样例输出 1

    ```
    0 0 0 3 1 2
    ```

    提示

    对于 100\% 的数据,1 \leq n\leq 100$,$0 \leq a_i \leq 10。

    参考答案

    1. #include
    2. using namespace std;
    3. int n, s[10000] = { 0 };
    4. int iecne[10000];
    5. int k = 0;
    6. int main()
    7. {
    8. cin >> n;
    9. for (int i = 1; i <= n; i++)
    10. {
    11. cin >> iecne[i]; //输入
    12. }
    13. for (int i = 1; i <= n; i++) //从第一个小鱼开始循环
    14. {
    15. for (int j = 1; j < i; j++) //在小鱼之前的所有小鱼循环
    16. {
    17. if (iecne[i] > iecne[j]) //比较
    18. {
    19. //s++;
    20. s[k]++; //统计
    21. }
    22. }
    23. k++; //由于我们没有数值可以当作输出数组,所以新建一个变量k在每一个循环结束后增加
    24. //cout << s << " "; //这里也可以直接输出,但是影响美观
    25. }
    26. for (int i = 0; i < n; i++) cout << s[i] << " "; //最后数组出书输出
    27. }

    题目思路

    在写的时候傻掉了,其实没有必要用k统计,直接用i不就好了?


    2.小鱼的数字游戏

    题目描述

    小鱼最近被要求参加一个数字游戏,要求它把看到的一串数字 a_iai​(长度不一定,以 00 结束),记住了然后反着念出来(表示结束的数字 00 就不要念出来了)。这对小鱼的那点记忆力来说实在是太难了,你也不想想小鱼的整个脑袋才多大,其中一部分还是好吃的肉!所以请你帮小鱼编程解决这个问题。

    输入格式

    一行内输入一串整数,以 00 结束,以空格间隔。

    输出格式

    一行内倒着输出这一串整数,以空格间隔。

    输入输出样例

    输入

    3 65 23 5 34 1 30 0

    输出 

    30 1 34 5 23 65 3

    说明/提示

    数据规模与约定

    对于 100\%100% 的数据,保证 0 \leq a_i \leq 2^{31} - 10≤ai​≤231−1,数字个数不超过 100100。

    参考答案

    1. #include
    2. using namespace std;
    3. int x[100],c=0;
    4. int main()
    5. {
    6. for(int i=0;;i++)
    7. {
    8. cin>>x[i];
    9. if(x[i]==0) break; //输入到0的时候直接跳出
    10. c=i; //在0的时候不会统计(统计最后一个的位置)
    11. }
    12. for(int j=c;j>=0;j--) cout<" "; //其实只有一行的时候可以不打括号
    13. return 0;
    14. }

    题目思路

    本题就是普普通通的倒着输出,其中统计了最后一个的位置,再用循环倒着输出就ok了


    3.冰雹猜想

    题目描述

    给出一个正整数 nn,然后对这个数字一直进行下面的操作:如果这个数字是奇数,那么将其乘 33 再加 11,否则除以 22。经过若干次循环后,最终都会回到 11。经过验证很大的数字(7\times10^{11}7×1011)都可以按照这样的方式比变成 11,所以被称为“冰雹猜想”。例如当 nn 是 2020,变化的过程是 20\to 10\to 5\to 16\to 8\to 4\to 2\to 120→10→5→16→8→4→2→1。

    根据给定的数字,验证这个猜想,并从最后的 11 开始,倒序输出整个变化序列。

    输入格式

    输入一个正整数 nn。

    输出格式

    输出若干个由空格隔开的正整数,表示从最后的 11 开始倒序的变化数列。

    输入输出样例

    输入 

    20

    输出

    1 2 4 8 16 5 10 20

    说明/提示

    数据保证,1 \le n\le 1001≤n≤100。

    参考答案

    1. #include
    2. using namespace std;
    3. int a[10005];
    4. int cnt;
    5. int main()
    6. {
    7. int n;
    8. scanf("%d",&n);
    9. int tmp=1;
    10. printf("1 ");
    11. while(n!=1)
    12. {
    13. if(n%2==0)
    14. {
    15. a[++cnt]=n;
    16. n=n/2;
    17. }
    18. else
    19. if(n%2==1)
    20. {
    21. a[++cnt]=n;
    22. n=n*3+1;
    23. }
    24. }
    25. for(int i=cnt;i>=1;i--)
    26. {
    27. printf("%d ",a[i]);
    28. }
    29. return 0;
    30. }

    这题其实不用注释,看题目解析就行

    题目思路

    首先我们来看一看题目,得出了下列信息:

    1.如果为奇数就*3+1

    2.如果为偶数就/2

    只需要模拟n变化为1的过程,然后存到一个数组中倒序输出


    4.[NOIP2005 普及组]校门外的树

    题目描述

    某校大门外长度为 ll 的马路上有一排树,每两棵相邻的树之间的间隔都是 11 米。我们可以把马路看成一个数轴,马路的一端在数轴 00 的位置,另一端在 ll 的位置;数轴上的每个整数点,即 0,1,2,\dots,l0,1,2,…,l,都种有一棵树。

    由于马路上有一些区域要用来建地铁。这些区域用它们在数轴上的起始点和终止点表示。已知任一区域的起始点和终止点的坐标都是整数,区域之间可能有重合的部分。现在要把这些区域中的树(包括区域端点处的两棵树)移走。你的任务是计算将这些树都移走后,马路上还有多少棵树。

    输入格式

    第一行有两个整数,分别表示马路的长度 ll 和区域的数目 mm。

    接下来 mm 行,每行两个整数 u, vu,v,表示一个区域的起始点和终止点的坐标。

    输出格式

    输出一行一个整数,表示将这些树都移走后,马路上剩余的树木数量。

    输入输出样例

    输入

    500 3
    150 300
    100 200
    470 471
    

    输出 

    298

    说明/提示

    【数据范围】

    • 对于 20\%20% 的数据,保证区域之间没有重合的部分。
    • 对于 100\%100% 的数据,保证 1 \leq l \leq 10^41≤l≤104,1 \leq m \leq 1001≤m≤100,0 \leq u \leq v \leq l0≤u≤v≤l。

    【题目来源】

    NOIP 2005 普及组第二题

    参考答案

    这是一道很经典的题目了吧?

    1. #include
    2. using namespace std;
    3. int l,i,j,s,n,a[10001],k,c;
    4. int main( )
    5. {
    6. cin>>l>>n;
    7. for(int i=1;i<=n;i++)
    8. {
    9. cin>>k>>s;
    10. for(int j=k;j<=s;j++)
    11. {
    12. a[j]=1;
    13. }
    14. }
    15. for(int i=0;i<=l;i++)
    16. {
    17. if(a[i]==0)
    18. {
    19. c++;
    20. }
    21. }
    22. cout<
    23. return 0;
    24. }

    题目思路

    思路很简单,利用0和1标记,若已经移树,则为1.

    直接在输入的循环里判断、标记。

    最后再过一遍,计数


    三.总结

    本节课主要是讲解了一维数组的练习题目,相信大家对这个逻辑有了一定的理解,大家可以自己动手敲敲代码,感受一下,下一节课就开始讲解一维数组的题目了,请大家继续关注。

    包教包会,帅的人已然点赞收藏关注,而丑的人还在犹豫,被犹豫了,快三连吧!


     系列文章目录

     本期收录于博主的专栏——C++保姆级入门教程,适用于编程入门初学者,感兴趣的朋友们可以订阅,查看其它内容教程。

    C++保姆级入门教程_iecne的博客-CSDN博客

    C++保姆级入门教程(1)   变量 输出 输入

    C++保姆级入门教程(2)   算术运算和赋值

    C++保姆级入门教程(3)   if语句

    C++保姆级入门教程(4)   循环

    C++保姆级入门教程(5)   顺序结构

    C++保姆级入门教程(6)   分支结构

    C++保姆级入门教程(7)  循环结构

    C++保姆级入门教程(8)  分支拓展

    C++保姆级入门教程(9)  一维数组基础

    C++保姆级入门教程(10) 一维数组练习


    感谢每一个观看本篇文章的朋友,更多精彩敬请期待:iecne的博客_CSDN博客-C++保姆级入门教程领域博主

    文章存在借鉴,如有侵权请联系修改删除!

  • 相关阅读:
    加载SSL证书
    26 mysql 索引的存储更新删除
    【2023】springboot通过阿里云oss进行文件单个批量文件上传下载
    使用spring的计时器StopWatch,更简洁方便(附源码)
    phpcms打开后台首页时向官网发送升级请求觉得卡怎么办?
    深入剖析 深度学习中 __init()__函数和forward()函数
    KMP算法(多种实现方式)
    kafka零拷贝sendfile及mmap简述
    技术分享| 融合调度中的广播功能设计
    PySide6应用实践 | 在PyCharm中安装、部署、启动PySide6
  • 原文地址:https://blog.csdn.net/CSDN_linyanchen/article/details/126076244