C小加之随机数

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

输入
第一行输入整数T(1<T<10)表示多少组测试数据,

每组测试数据包括2行,

第1行为1个正整数,表示所生成的随机数的个数:N(0<N≤100)

第2行有N个用空格隔开的正整数,为所产生的随机数。

(随机数为题目给定的,不需要ACMer生成)

输出
输出也是2行,第1行为1个正整数M,表示不相同的随机数的个数。

第2行为M个用空格隔开的正整数,为从小到大排好序的不相同的随机数。

样例输入
1
10
20 40 32 67 40 20 89 300 400 15
样例输出
8
15 20 32 40 67 89 300 400

解题思路:

本题分为两个部分:排序和去重。

排序,数据多的情况使用快排,是最好的选择,快排的程序代码如下:

int cmp(const void *a,const void *b)
{
	return(*(int *)a-*(int *)b);
}
qsort(a,m,sizeof(a[0]),cmp);

去重的方法有多重,我选择的方法是覆盖相同数据以达到去重的目的。

程序代码:

#include<stdio.h>
#include<stdlib.h>
//void fun(int a[],int n);
int cmp(const void *a,const void *b)
{
	return(*(int *)a-*(int *)b);
}
int main()
{
	int n,m,a[105],i,j,count=0;
	scanf("%d",&n);
	while(n--)
	{
		scanf("%d",&m);
		//getchar();
		for(i=0;i<m;i++)
		{
			scanf("%d",&a[i]);

		}
		//fun(a,m);
		qsort(a,m,sizeof(a[0]),cmp);
		for(i=0;i<m;i++)
		{

			if(a[i]==a[i-1])
			{
				for(j=i;j<m-1;j++)
					a[j]=a[j+1];
				m--;
				i--;
			}
		}
		printf("%d\n",m);
		for(i=0;i<m;i++)
			printf("%d ",a[i]);
		printf("\n");
	}
	return 0;
}
时间: 2025-01-13 12:47:34

C小加之随机数的相关文章

C小加之随机数 NYOJ 255

1 #include<stdio.h>//C小加之随机数(255) 2 #include<string.h> 3 int main() 4 { 5 int x,y,i,a[110],j,t,p,b[110],cnt; 6 scanf("%d",&x); 7 while(x--){ 8 scanf("%d",&y); 9 memset(a,0,sizeof(a)); 10 for(i=0;i<y;i++){ 11 scan

Java开发中经典的小实例-(随机数)

import java.util.Random; //输出小于33的7个不相同的随机数public class probability { static Random random = new Random(); static int[] array = new int[7]; static int number; public static void main(String[] args) {        // TODO Auto-generated method stub for (int

NYOJ 255 c小加之随机数

#include<stdio.h>#include<string.h> int main(){ int a[100],b[100],num,n,i,j; scanf("%d\n",&num); while(num--) { int sum=0; scanf("%d",&n); memset(b,0,sizeof(b)); for(i=0;i<n;i++) scanf("%d",&a[i]);

微信小程序生成随机数

const charts = ['0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'];const random = function generateMixed(n){ var res = ''; for(var i = 0; i <n; i++){ var id

微信小程序生成随机数 0或者1 js代码

Math.floor(Math.random() + 0.5) Math.random()的取值范围是: 0<=Math.random()<1  随机小数 Math.floor(X) =X的整数位例如Math.floor(6.999)  ===  6Math.floor(39.001)   ===  39Math.floor(8)   ===  8 原文地址:https://www.cnblogs.com/lsyy2017/p/11704769.html

随机数测试

学习链接 http://lavasoft.blog.51cto.com/62575/113758/ import java.util.Random; /** * 随机数.随即字符串工具 * User: leizhimin * Date: 2008-11-19 9:43:09 */ public class RandomUtils { public static final String allChar = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGH

SOM自组织映射

SOM, 即Self- Organizing Mapping( 自组织映射网络) , 或称为Self- Organizing Feature Mapping( 自组织特征映射网络) , 它是一种无指导训练的神经网络, 自组织的过程实际上就是一种无指导的学习.它通过自身训练, 自动对输入模式进行聚类.它的拓扑结构图.最早是由芬兰赫尔辛基理工大学Kohen于1981年提出的. 它模拟人脑中处于不同区域的神经细胞分工不同的特点,即不同区域具有不同的响应特征,而且这一过程是自动完成的.自组织映射网络通过

游戏开发中的人工智能 复习

游戏开发中的人工智能 复习 (个人复习,一些仅是给自己的复习提示(=w=),转载注明出处:http://blog.csdn.net/hcbbt/article/details/42815479) 配套教材:游戏开发中的人工智能 知识点 移动 Bresenham,视线(略),拦截 // Bresenham if (deltaCol > deltaRow) { fraction = deltaRow * 2 - deltaCol; while (nextCol != endCol) { if (fr

感知器与梯度下降

声明:本文由Ronny发表在http://www.cnblogs.com/ronny/p/ann_01.html ,如需转载请注明出处 一.前言 1,什么是神经网络? 人工神经网络(ANN)又称神经网络(NN),它是一种受生物学启发而产生的一种模拟人脑的学习系统.它通过相互连结的结点构成一个复杂的网络结构,每一个结点都具有多个输入和一个输出,并且该结点与其他结点以一个权重因子相连在一起.通俗来说,神经网络是一种学习器,给它一组输入,它会得到一组输出,神经网络里的结点相互连结决定了输入的数据在里面