一维数组篇——每日刷题经验分享~😎
- 前言🙌
- 有序序列插入一个整数 😊
- 序列中删除指定数字 😊
- 序列中整数去重
- 小乐乐查找数字
- 筛选法求素数
- 总结撒花💞
😎博客昵称:博客小梦~
😊最喜欢的座右铭:全神贯注的上吧!!!
😊作者简介:一名热爱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语言一维数组的知识,则此文是非常适合大家阅读的,然后再亲自实践刷题,肯定会对知识的掌握更加的深刻,和新的理解~ 希望大家通过阅读此文有所收获!😘如果我写的有什么不好之处,请在文章下方给出你宝贵的意见😊。如果觉得我写的好的话请点个赞赞和关注哦~😘😘😘