您的位置:首页 > 其它

sicily 1341. 明明的随机数

2012-12-11 20:46 344 查看
Description
明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤100),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号。然后再把这些数从小到大排序,按照排好的顺序去找同学做调查。请你协助明明完成“去重”与“排序”的工作。

Input
输入包含多个测试数据。
每个测试数据有2行,第1行为1个正整数,表示所生成的随机数的个数N,第2行有N个用空格隔开的正整数,为所产生的随机数。

Output
对每个测试数据输出2行。第1行为1个正整数M,表示不相同的随机数的个数。第2行为M个用空格隔开的正整数,为从小到大排好序的不相同的随机数。

先用选择排序进行排序,然后开一个新数组,把不重复的数字填进去,达到去重的目的,再输出。

View Code

#include<stdio.h>
#define MAX 500
void selectionSort( int array[], int size );
void swapInArray( int array[], int first, int second );
void filter( const int array[], int size );
void printArray( const int array[], int size );

int main()
{
int array[MAX] = {0};
int n;
int i;

while ( scanf( "%d", &n ) != EOF )
{

for ( i = 0; i < n; i++ )
{
scanf( "%d", &array[i] );
}

selectionSort( array, n );

filter( array, n );

}
return 0;
}

void selectionSort( int array[], int size )
{
int i, j;
int min;

for ( i = 0; i < size - 1; i++ )
{
min = i;
for ( j = i + 1 ; j < size; j++ )
{
if ( array[j] < array[min] )
{
min = j;
}
}

if ( i != min )
{
swapInArray( array, i, min );
}
}

return;
}

void swapInArray( int array[], int first, int second )
{
int temp;

temp = array[first];
array[first] = array[second];
array[second] = temp;

return;
}

void filter( const int array[], int size )
{
int unique = 0;
int i;
int filteredArray[MAX] = {0};

filteredArray[unique] = array[0];

for ( i = 1; i < size; i++ )
{
if ( array[i] != filteredArray[unique] )
{
unique++;
filteredArray[unique] = array[i];
}
}

unique++;

printf( "%d\n", unique );

printArray( filteredArray, unique );

return;
}

void printArray( const int array[], int size )
{
int i;

printf( "%d", array[0] );

for ( i = 1; i < size; i++ )
{
printf( " %d", array[i] );
}

printf("\n");

return;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: