关于去重打印的两种方法

顺便学习markdwon。

同学询问了我一道比较普通的题(见上文)

题目 众所周知复读机是万恶之源, 现有n个数,请你把重复的数字去掉,并将剩余数字按从小到大输出。

输入 输出 第一行输入一个整数n(1 ≤ n ≤ 1000)。第二行输入n个整数a0, a1, a2, ... an-1(1 ≤ ai ≤ 1000)。

这道题同学用了常规的思路 即先挨个检测查看是否有重复的数字将其删除再冒泡排序,代码如下

#include<stdio.h>
int main()
{
	int a[1000],i,j,m,n;
	scanf("%d",&n);
	for(i=0;i<n;i++)
	{
		scanf("%d",&a[i]);
	}
	for(j=0;j<n-1;j++)//删除重复数并重排 
		{
			if(a[j]==a[j+1])
			{
				for(i=j+1;i<n;i++)
				{
					a[i]=a[i+1];
				}
				n--;
			}
		}
	for(i=0;i<n;i++)//冒泡排序 
	{
		for(j=0;j<n-1;j++)
		{
			if(a[j]>a[j+1])
			{
				m=a[j];
				a[j]=a[j+1];
				a[j+1]=m;
			}
		}
	}
	for(i=0;i<n;i++)
	{
		printf("%d ",a[i]); 
	}
 }

[^他的代码测试无误 但是OJ错误91%,暂不知道原因。]:

而昨天了解到了新的思路,即先进行冒泡排序,再进行挨个检测再进行输出,如果检测到该数和前一个数字相同即不作输出,同样达到去重的效果,代码如下:

#include<stdio.h>
int main()
{
	int n, arr[1000],m;
	scanf_s("%d", &n);
	for (int i = 0; i < n; i++)
	{
		scanf_s("%d", &arr[i]);
	}
	for (int i = 0; i < n; i++)//冒泡排序 
	{
		for (int j = 0; j < n - 1; j++)
		{
			if (arr[j] > arr[j + 1])
			{
				m = arr[j];
				arr[j] = arr[j + 1];
				arr[j + 1] = m;
			}
		}
	}
	for (int i = 0; i < n; i++)
		{
			if (arr[i] != arr[i - 1])
			{
				printf("%d ", arr[i]);
			}
		}
	return 0;
}
上一篇:python调用机器喇叭发出蜂鸣声(Beep)的代码


下一篇:【驻油点】一辆重型卡车欲穿过1000公里的沙漠,卡车耗油为1升/公里,卡车总载油能力为500公升。显然卡车一次是过不了沙漠的。因此司机必须设法在沿途建立几个贮油点,使卡车能顺利穿越沙漠,试问司机如何建