小白养成记 (4)------去重处理

第一个超过五十行的代码~~~

小明随机生成了n(n<10000)个0到999之间的整数,可能有重复的整数,请你帮他按从小到大输出这些整数(忽略重复数字)。例如,假设n=8,小明随机生成的8个数是:1 2 5 2 4 5 6 5 2,输出结果为:1 2 4 5 6

因为要从小到大输出,所以要先进行升序排序,再进行去重。

代码如下:

用函数InputArr ( ) , SortArr ( ) , PrnArr ( ) 中的形参array来接收一个整型数组,用形参n来接收数组元素个数

#include<stdio.h>
#define N 10000
int InputArr(int array[],int n);
int SortArr(int array[],int n);
int PrnArr(int array[],int n);
int main()
{
	int n;
	int array[N];
	printf("请输入数组元素个数:\n");
	scanf("%d",&n);
	InputArr(array,n);//输入数组a的n个元素
	SortArr(array,n);  //将数组a的n个元素进行升序排序
	PrnArr(array,n);   //输出数组a的n个元素 
	return 0;
}

下面依次进行输入、排序、输出:

(1)输入:

int InputArr(int array[],int n)
{
	int i;
	printf("请输入%d个整数:\n",n);
	for(i=0;i<n;i++)
	scanf("%d",&array[i]);
 } 

(2)升序排序:

定义两个数为array [ i ]、array [ j ];

因为 i < j ,所以假设 j 最大为 n,此时 i 为 n-1;

所以i < n-1 ;j = i +1;

若i>j,则需将i与j换位,利用变量temp进行换位

int SortArr(int array[],int n)
 {
 	int i,j,temp;
 	for(i=0;i<n-1;i++)
 	{
 		for(j=i+1;j<n;j++)
 		{
 			if(array[i]>array[j])
 			{
 				temp=array[i];
 				array[i]=array[j];
 				array[j]=temp;
			 }
		 }
	 }
	 
 }

(3)输出:

如果是第一位直接输出;之后的每位需与前一位进行比较看是否相等,若是相等则不输出;若不等才可以输出。

e.g. 输入1,1,2,1   若是 array [ i ] == array [ i - 1]的情况下输出array[ i ],则为1,1,所以不等情况下输出;

        

int PrnArr(int array[],int n)
 {
 	int i;
 	for(i=0;i<n;i++)
 	{
 		if(i==0)
 		printf("%d ",array[i]);
 		else if(array[i]!=array[i-1])
		 {
 			printf("%d ",array[i]);
		 }
	 }
    printf("\n");
 }
发布了17 篇原创文章 · 获赞 19 · 访问量 628

猜你喜欢

转载自blog.csdn.net/So_cute_SJM/article/details/102537839