C语言一维数组篇【下】——每日刷题经验分享

简介: C语言每日刷题经验分享,实操运用编程思想和提高算法思维~

@TOC
追梦之旅,你我同行

   
😎博客昵称:博客小梦~
😊最喜欢的座右铭:全神贯注的上吧!!!
😊作者简介:一名热爱C/C++,算法等技术、喜爱运动、热爱K歌、敢于追梦的小博主!

😘博主小留言:哈喽!😄各位CSDN的uu们,我是你的博客好友小梦,希望我的文章可以给您带来一定的帮助,话不多说,文章推上!欢迎大家在评论区唠嗑指正,觉得好的话别忘了一键三连哦!😘
在这里插入图片描述

前言🙌

    哈喽各位友友们😊,我今天又学到了==很多有趣的知识==, 现在迫不及待的想和大家分享一下!😘我仅已此文,给大家分享刷题分享~ !都是精华内容,可不要错过哟!!!😍😍😍

有序序列插入一个整数 😊

*描述
有一个有序数字序列,从小到大排序,将一个新输入的数插入到序列中,保证插入新数后,序列仍然是升序。
输入描述:
第一行输入一个整数N(0≤N≤50)。
第二行输入N个升序排列的整数,输入用空格分隔的N个整数。
第三行输入想要进行插入的一个整数。
输出描述:
输出为一行,N+1个有序排列的整数。*
在这里插入图片描述此题解决的关键点: 😍

1、 ==创建多一个变量m代替n,做下面的while循环控制条件,避免for循环控制条件的失控;==
2、 ==常规情况:先将比x大的后面元素往后移动,再将x插入。==
3、 ==考虑特殊的情况,当插入的数据比数组中的元素都大,则将其插入到原数组最大元素的后面即可。==

解题代码分享: 😍

#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 x = 0;
    scanf("%d", &x);
    for (i = 0; i < n; i++)
    {

        if (arr[i] > x)
        {
            int m = n;
            while (m - i)
            {
                arr[m] = arr[m - 1];
                m--;
            }
            arr[i] = x;
            break;
        }
        if (arr[n - 1] < x)
        {
            arr[n] = x;
        }

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

序列中删除指定数字 😊

*描述
有一个整数序列(可能有重复的整数),现删除指定的某一个整数,输出删除指定数字之后的序列,序列中未被删除数字的前后位置没有发生改变。
数据范围:序列长度和序列中的值都满足 1≤n≤501≤n≤50
输入描述:
第一行输入一个整数(0≤N≤50)。
第二行输入N个整数,输入用空格分隔的N个整数。
第三行输入想要进行删除的一个整数。
输出描述:
输出为一行,删除指定数字之后的序列。*

在这里插入图片描述
此题解决的关键点: 😍

1、 ==删除数组中的一个元素,将后面的元素往前移动覆盖,再将数组总个数减一==
2、 ==特殊情况,当出现重复的数据时,删完一个后,要回到前一个位置,再判断,如果满足条件再删去==

解题代码分享: 😍

#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 x = 0;
    scanf("%d",&x);
    for (i = 0; i < n; i++)
    {
        if(arr[i] == x)
        {
            for(int t=i;t<n;t++)
            {
                arr[t]=arr[t+1];//将后面数据覆盖前面的数据
            }
            n--;
        }
        if(arr[i] == x)//回到前一个位置,再判断(关键步骤)
        i--;
    }
    for (i = 0; i < n; i++)
    {
        printf("%d ",arr[i]);
    }
    return 0;
}

序列中整数去重

*描述
输入n个整数的序列,要求对这个序列进行去重操作。所谓去重,是指对这个序列中每个重复出现的整数,只保留该数第一次出现的位置,删除其余位置。
输入描述:
输入包含两行,第一行包含一个正整数n(1 ≤ n ≤ 1000),表示第二行序列中数字的个数;第二行包含n个整数(范围1~5000),用空格分隔。
输出描述:
输出为一行,按照输入的顺序输出去重之后的数字,用空格分隔。*

在这里插入图片描述此题解决的关键点: 😍

1、 ==创建一个标记变量w,将w == 1的数字打印出来,当出现重复数字时,将w 修改为0 ,不打印后面重复的数字==
2、 ==j == i -1 循环控制条件的设置很关键,实现对i的前面元素都和i下标的元素进行比较,如果相同,则不打印==

解题代码分享: 😍

#include <stdio.h>

int main() 
{
    int n = 0;
    scanf("%d",&n);
    int i = 0;
    int j = 0;
    int arr[5000] = {0};
    for (i = 0; i < n; i++)
    {
        scanf("%d",&arr[i]);
    }
    for (i = 0; i < n; i++)
    {
        int w = 1;
        for (j = i - 1; j >= 0; j--)
        {
            if(arr[i] == arr[j])
            w = 0;
        }
        if(w == 1)
        printf("%d ",arr[i]);
    }
    
    return 0;
}

小乐乐查找数字

*描述
给定n个整数和一个整数x,小乐乐想从n个整数中判断x出现几次,请编程帮他实现。
输入描述:
共3行
第一行,一个整数,表示n(1 <= n <= 100)。
第二行,共输入n个整数,两个整数之间用空格分隔。
第三行,输入一个整数,表示要查找的整数x。
输出描述:
一行,表示整数x出现的次数。*
在这里插入图片描述
解题代码分享: 😍

#include <stdio.h>

int main() 
{
    int n = 0;
    scanf("%d",&n);
    int arr[100] = {0};
    int i = 0;
    for (i = 0; i < n; i++)
    {
        scanf("%d",&arr[i]);
    }
    int x = 0;
    scanf("%d",&x);
    int count = 0;
    for (i = 0; i < n; i++)
    {
        if(arr[i] == x)
        count++;
    }
    printf("%d",count);
    return 0;
}

筛选法求素数

*描述
用筛选法求n以内的素数。筛选法求解过程为:将2~n之间的正整数放在数组内存储,将数组中2之后的所有能被2整除的数清0,再将3之后的所有能被3整除的数清0 ,以此类推,直到n为止。数组中不为0 的数即为素数。
输入描述:
多组输入,每行输入一个正整数(不大于100)。
输出描述:
针对每行输入的整数n,输出两行,第一行,输出n之内(包括n)的素数,用空格分隔,
第二行,输出数组中2之后被清0 的个数。每行输出后换行。*
在这里插入图片描述

此题解决的关键点: 😍

1、 ==将2 ~ n的数字存放到下标2 ~ n的数组下标中,因此数组的创建应设置为101个元素的大小,当存放100时,对应的数组下标为101。==
2、 ==再设置两层循环,实现i 后面的所有元素跟i整除,如果为0,则将置为0。==
3、==最后循环输出不为0的数组元素内容==
4、 ==0 和 1一定不是素数==。
#include <stdio.h>

int main() 
{
    int n = 0;
    while(scanf("%d",&n) == 1)
    {
        int arr[101];
        //将2~n的数字存放到下标2~n的数组下标中
        int i = 0;
        int j = 0;
        for (i = 2; i <= n; i++)
        {
            arr[i] = i;
        }
        int count = 0;
        for (i = 2; i <= n; i++)
        {
            for (j = i + 1; j <= n; j++)
            {
                if(arr[j] % i == 0)
                {
                    arr[j] = 0;
                }   
            }
        }
        for (i = 2; i <= n; i++)
        {
            if(arr[i] != 0)
            printf("%d ",arr[i]);
            else
            count++;
        }
        printf("\n%d\n",count);
    }
    return 0;
}

总结撒花💞

   ==本篇文章旨在分享C语言一维数组的刷题经验。如果大家学习了C语言一维数组的知识,则此文是非常适合大家阅读的,然后再亲自实践刷题,肯定会对知识的掌握更加的深刻,和新的理解~ 希望大家通过阅读此文有所收获==!😘如果我写的有什么不好之处,请在文章下方给出你宝贵的意见😊。如果觉得我写的好的话请点个赞赞和关注哦~😘😘😘
相关文章
|
1月前
|
C语言
在C语言中数组作为函数参数的应用与示例
在C语言中数组作为函数参数的应用与示例
15 0
|
1月前
|
C语言
【进阶C语言】数组笔试题解析
【进阶C语言】数组笔试题解析
17 0
|
1月前
|
存储 C语言 索引
C语言数组
C语言数组
14 0
|
2天前
|
存储 C语言
C语言中字符串的引用与数组元素操作
C语言中字符串的引用与数组元素操作
11 0
|
22天前
|
编译器 程序员 C语言
【C语言】变长数组,二分查找和数组之间自动替换的实现
【C语言】变长数组,二分查找和数组之间自动替换的实现
|
22天前
|
存储 C语言
【C语言数组】创建、初始化、以及使用2
【C语言数组】创建、初始化、以及使用
|
1月前
|
存储 程序员 C语言
C语言中的结构体数组
C语言中的结构体数组
9 0
|
1月前
|
存储 C语言 索引
C语言一维数组
C语言一维数组
13 1
|
1月前
|
存储 编译器 C语言
【c语言 】数组入门
【c语言 】数组入门
30 0
|
1月前
|
存储 搜索推荐 C语言