您的位置:首页 > 其它

明明的随机数

2016-07-18 10:45 267 查看
/**

题目描述

明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤100),

对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号。然后再把这些数从小到大排序,

按照排好的顺序去找同学做调查。请你协助明明完成“去重”与“排序”的工作。

Input Param

n 输入随机数的个数

inputArray n个随机整数组成的数组

Return Value

OutputArray 输出处理后的随机整数

注:测试用例保证输入参数的正确性,答题者无需验证。

输入描述 :

输入多行,先输入随机整数的个数,在输入相应个数的整数

输出描述 :

返回多行,处理后的结果

**/

代码

#include<iostream>
#include<string.h>
using namespace std;

int ProcessRandomArray(int InputArray[], int n,int(& OutputArray)[1000],int& UniqueNum){//去重操作,输出为OutputArray数组,去重后的数据个数为UniqueNum,这里采用数组引用,得定义数组大小,仅作练习,须改进成指针传递
int pt = 0;
UniqueNum = 0;
bool arr[1000];
memset(arr, 0, 1000);
for (int i = 0; i < n; i++){//bool数组标志是否重复
if (arr[InputArray[i]] == 0){
OutputArray[pt] = InputArray[i];
arr[InputArray[i]] = 1;
pt++;
UniqueNum++;
}//end if
}//end for
return 0;
}

int  BubbleSortingArray(int InputArray[], int length){//排序好的数组通过InputArray输出,采用冒泡排序,须改进为快排算法
int temp;
for (int i = 0; i < length-1; i++){//length-1这一点易误为length
for (int j = 0; j<length - 1-i; j++){
if (InputArray[j]>InputArray[j + 1]){
temp = InputArray[j];
InputArray[j] = InputArray[j + 1];
InputArray[j + 1] = temp;
}//end if
}// end for
}//end for
return 0;
}

int main(){
int n = 0,i = 0,UniqueNum=0,Input;
int InputArray[1000] = { 0}, OutputArray[1000] = {0};
while(cin>>n && n!= EOF){//多组测试案例,多次输入
if (n == 0 || n > 1000)
continue;
int *pt = NULL;//防止分配内存失败,进行异常处理
try {
pt = new int
;
// 其它代码
}
catch (const bad_alloc e) {
return -1;
}
memset(pt, 0, sizeof(int)*n);
for (int i = 0; i < n; i++){
cin >> Input;
*(pt + i) = Input;
}
for (int i = 0; i < n; i++)//由于下面函数调用采用数组输入,因此将指针转换为数组
InputArray[i] = *(pt + i);
ProcessRandomArray(InputArray, n, OutputArray, UniqueNum);
BubbleSortingArray(OutputArray, UniqueNum);
int i = 0;//容易误采用前面的i值,出现输入错误
while (OutputArray[i] != '\0'&& i<UniqueNum)
{
printf("%d\n", OutputArray[i]);
i++;
}
free(pt);//每次输出后释放内存
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息