资讯专栏INFORMATION COLUMN

2021-09-08三道程序(序列中删除指定数字、有序序列判断、有序序列合并)

phpmatt / 1651人阅读

摘要:序列中删除指定数字程序创建一个数组输入一个整数输入个整数到数组里多组输入输入你想要删除的数字遍历数组如果不是我们想除的值,进入语句为什么要这么写,接着往下看自己给自己赋值,赋

序列中删除指定数字

程序:

#includeint main(){	int arr[30] = { 0 };// 创建一个数组	int n = 0;	int z = 0;    scanf("%d", &n);// 输入 一个整数 n	int i = 0;	for (i = 0; i < n; i++)// 输入 n(n<=30) 个整数 到数组 arr里	{		scanf("%d", &arr[i]);// 多组输入	}	scanf("%d",&z);// 输入你想要删除的数字	int j = 0;	for (i = 0; i < n; i++)// 遍历数组	{		if (arr[i] != z) // 如果不是我们想除的值,进入 if 语句		// 为什么要这么写,接着往下看		{			arr[j++] = arr[i];// 自己 给自己赋值,赋完之后 j++,i 再 ++,这样就能确保不会改变原有数据的顺序		}	}	for (i = 0; i < j; i++)// 打印数组(注意 i < j,等我下面讲解,你就直接妙在那了 )	{		printf("%d ", arr[i]);	}	return 0;}

if (arr[i] != z),让我来通过画图方式向你们表示

即 i 为 3时 ,即a[3] == 4 。是我们相除的值时,我们就越过它,怎么越过而不会改变它的顺序呢?

答案就在 循环的 i++ 和 a[j++] 上,当我们遇到想要删除的数字元素时,我们是不满足 if 语句 if (arr[i] != z) ,所以它跳到 i++,进行自增,跳过该数字元素,而a[j++] 中 j 的后置加加,因为没有执行的机会,而保持原来位置,直到,满足 if 语句时,在对其进行赋值。这样就间接删除我们想要删除的值得元素,是不是很妙?

而且 遍历完 a数组时(完成删除元素之后),a[j++] 中 j 的 后置加加,让它再加一,(这正是它绝妙之处),

	for (i = 0; i < j; i++) // arr[j] 存放 j 个 元素, 下标为 0 ~ j -1  细品!!!	{		printf("%d ", arr[i]);	}	return 0;}

你会发现下标 j-1 之后 剩余重复元素(我们不需要的),一个都没有输出,因为 j -1 ,将其中断,所以不会访问到我们需要的数。

另外我再提一点,有人可能会使用 从前向后覆盖,以此来间接删除元素


有序序列判断

#includeint main(){	int arr[30] = { 0 };// 创建一个数组	int n = 0;	int i = 0;	int j = 0;	scanf("%d", &n);//  输入一个整数 n	for (i = 0; i < n; i++) // 输入 n 个整数到 数组里	{		scanf("%d", &arr[i]); // 多组输入	}	for (i = 1; i < n; i++) // 作用: 我们只需要 它的 第一个元素	{	// 有序数组: 升序 降序             // 升序: 后一个元素 比 前一个元素 大,以此类推		if (arr[i] >= arr[i - 1])			{			for (j = i; j < n; j++)//遍历数组,i = 1 方便 比较大小,来判断 升序			{				if (arr[j] < arr[j - 1])// 如果在 升序中 出现这种 相反情况的,那么它肯定不是升序数组,也不是降序				{					printf("unsorted/n");//  所以输出这条  unsorted  无序的					goto end;// 通过goto 直接跳到 return 0,程序结束					// 当然 你也可以写 return 0; 也是一样				}			}			if (j == n)//  当遍历 数组 时,意味着 数组 为升序			{				printf("sorted/n");// sorted  有序的				goto end;			}		}             // 降序  第二个元素 小于 第 一个元素,以此类推		else if (arr[i] <= arr[i - 1])// else if 是防止 你们有人使用break,如果是 if 的话, 跳出最近的循环,会继续进行判断,会出现意外情况,明明 是无序的,却输出 有序的(降序的)		{			for (j = i; j < n; j++)//遍历数组,i = 1 方便 比较大小,来判断 降序			{				if (arr[j] > arr[j - 1])// 如果在 降序中 出现这种 相反情况的,那么它肯定不是降序数组,也不是升序				{					printf("unsorted/n");// 所以 输出 unsorted 无序的					goto end;				}			}			if (j == n)//  当遍历 数组 时,意味着 数组 为降序			{				printf("sorted/n");// sorted  有序的				goto end;			}		}	}end:		return 0;}

有序序列合并

#include#includeint compare(const void* e1, const void* e2){	return *(int*)e1 - *(int*)e2;}int main(){	int n = 0;	int m = 0;	int a1[30] = { 0 };	int a2[30] = { 0 };	scanf("%d %d", &n, &m);// 输出两个整数 n  和 m	int i = 0;	for (i = 0; i < n; i++)// 输入 n 个整数 放进 数组 a1	{		scanf("%d", &a1[i]);	}	for (i = 0; i < m; i++)// 输入 m 个整数 放进 数组 a2	{		scanf("%d", &a2[i]);	}	for (i = 0; i <  m; i++)// 数组a1[n] 最后一个元素的下标为 n-1,所以我们追加数组,应该从下标 n 开始赋值 追加数组 a2	{		a1[n+i] = a2[i];	}	qsort(a1, n + m, sizeof(int), compare);// 这里使用的qsort 进行排序 注意添加头文件 stdlib,h	for (i = 0; i < (n + m); i++)//最后输出一下数组a1就行了,因为 我们是把 a2  追加 给了 a1	{		printf("%d ", a1[i]);	}	return 0;}

如果大家有什么新思维,可以在下方评论。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/119680.html

相关文章

  • 初探STL之算法

    摘要:算法部分主要由头文件组成。数值算法对容器内容进行数值计算。在指定范围内查找由输入的另外一对标志的第二个序列的最后一次出现。重载函数使用自定义比较操作。删除指定范围内所有等于指定元素的元素。返回,指出序列中最小的元素。 STL算法部分主要由头文件,,组成。要使用 STL中的算法函数必须包含头文件,对于数值算法须包含,中则定义了一些模板类,用来声明函数对象。 分类 STL中算法大致分为...

    nanfeiyan 评论0 收藏0
  • JavaScript数据结构和算法

    摘要:栈被称为一种后入先出的数据结构。散列使用的数据结构叫做散列表。这些操作需要求助于其他数据结构,比如下面介绍的二叉查找树。 前言 在过去的几年中,得益于Node.js的兴起,JavaScript越来越广泛地用于服务器端编程。鉴于JavaScript语言已经走出了浏览器,程序员发现他们需要更多传统语言(比如C++和Java)提供的工具。这些工具包括传统的数据结构(如链表,栈,队列,图等),...

    EastWoodYang 评论0 收藏0
  • 排序算法

    摘要:排序代码实现和一概念排序算法的稳定性稳定性稳定排序算法会让原本有相等键值的纪录维持相对次序。交换的结果导致结点的值变化了,重复,,的操作,直到没有孩子时跳出代码实现构建初始堆堆排序算法思想大顶堆举例将待排序的序列构造成一个大顶堆。 排序 代码实现:Java 和 Python 一、概念 1.1 排序算法的稳定性 稳定性:稳定排序算法会让原本有相等键值的纪录维持相对次序。也就是如果一个排序...

    kevin 评论0 收藏0
  • 排序算法

    摘要:排序代码实现和一概念排序算法的稳定性稳定性稳定排序算法会让原本有相等键值的纪录维持相对次序。交换的结果导致结点的值变化了,重复,,的操作,直到没有孩子时跳出代码实现构建初始堆堆排序算法思想大顶堆举例将待排序的序列构造成一个大顶堆。 排序 代码实现:Java 和 Python 一、概念 1.1 排序算法的稳定性 稳定性:稳定排序算法会让原本有相等键值的纪录维持相对次序。也就是如果一个排序...

    binaryTree 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<