C0185 [2006普及组-A]明明的随机数(C语言写)

2023-10-30

题目描述

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

输入描述

有 2 行,第 1 行为 1 个正整数 N,表示所生成的随机数的个数:

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

输出描述

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

样例输入

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

8
15 20 32 40 67 89 300 400

代码及思路

/*
	1.先输入随机数的个数,然后输入数据 
	2.去重:循环数组num(一层循环),依次让temp指向数组中每一个数据,
		temp在指向数组num中的值时,要循环temp所指向的
		下标之后的数据(二层循环),如果temp和后面的数据有相等的话 
		就将后面的数据置为-1.二层循环结束后,若temp不是-1的话,就将temp的值
		赋给数组tempNum,同时记录tempNum的下标. (这里不能用下标i,因为i下标对应的值
		可能是-1,新的数组的个数小于等于原数组的个数) 
	3.排序:对数组tempNum进行排序 让第一个数据和后面的数据进行比较,若后面的数据小,就把小的数放在
		第一个位置,同理,第二个数据和后面的数据进行比较,有比第二个数据小的放在第二个位置,依次类推
		最后 得出新的数组是按照从小到大的顺序进行排列 
	4.输出排序后的数据 
*/ 
#include<stdio.h>	//头文件
int sortQ(void);		//声明函数 
int main(void){
	sortQ(); 	//调用函数 
	return 0;
}
 
int sortQ(void){
	int i,j,t,a,M=0,N,temp,min,num[100],tempNum[100]; 
	scanf("%d",&N);		//输入随机数的个数
	for(i=0;i<N;i++){
		scanf("%d",&a);
		num[i]=a;
	}
	/*  去重:
		循环数组num(一层循环),依次让temp指向数组中每一个数据,
		temp在指向数组num中的值时,要循环temp所指向的
		下标之后的数据(二层循环),如果temp和后面的数据有相等的话 
		就将后面的数据置为-1.二层循环结束后,若temp不是-1的话,就将temp的值
		赋给数组tempNum,同时记录tempNum的下标. (这里不能用下标i,因为i下标对应的值
		可能是-1,新的数组的个数小于等于原数组的个数) 
	*/ 
	for(i=0;i<N;i++){	 
		temp=num[i];	//temp指向i对应的数 
		for(j=i+1;j<N;j++){
			if(temp==num[j]){	//判断temp是否等于后面的数据,若相等就把后面的数据置为-1 
				num[j]=-1;
			}
		}
		if(temp!=-1){	//判断temp是否等于-1,不等于-1就把数组num中的值赋值给数组tempNum 
			tempNum[M]=temp;	 
			M++;	//记录新数组的下标 
		}
	}
	/* 排序: 
		对数组tempNum进行排序 让第一个数据和后面的数据进行比较,若后面的数据小,就把小的数放在
		第一个位置,同理,第二个数据和后面的数据进行比较,有比第二个数据小的放在第二个位置,依次类推
		最后 得出新的数组是按照从小到大的顺序进行排列 
	 */ 
	for(i=0;i<M;i++){
		for(j=i+1;j<M;j++){
			if(tempNum[i]>tempNum[j]){
				t=tempNum[i];		//下面三句是对两个数的交换 
				tempNum[i]=tempNum[j];
				tempNum[j]=t;
			}
		}
	}
	printf("%d\n",M);	//输出tempNum数组的长度(去重后数组的个数) 
	//输出tempNum数组排序后的值 
	for(i=0;i<M;i++){
		printf("%d ",tempNum[i]);
	}
	return 0;
} 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C0185 [2006普及组-A]明明的随机数(C语言写) 的相关文章

  • jsp 页面选项卡

  • 使用阿里巴巴的EasyExcel操作Excel

    引入依赖
  • 使用TortoiseGit执行merge/rebase操作

    如果使用git 相信大家比较多的使用merge 对于rebase则少有陌生 相信刚使用git不久的同学会有一个困惑 经常使用merge会造成破窗效应 查阅log时会掺杂了大量无用的小提交 起初也对此习以为常 毕竟svn就是这样 使用reba
  • js中background-position 无效

    css中正确书写background position x y 坐标之间有空格 然而在写js的时候如果粗心会忘记第一个 px 后面加个空格 正确js书写应该是backgroundposi x px y px
  • Docker基本概念、linux

    Docker的基本概念 一 认识容器 1 1 容器是什么 1 2 对比容器和虚拟机 1 2 1 虚拟化的差异 1 2 2 资源利用总结 二 Docker基本概念 2 1 Docker是什么 2 2 Docker 的思想与核心 2 3 Doc
  • Qt-常用数据类型

    常用基本数据类型 类型名称 注释 备注 qint8 signed char 有符号8位数据类型 qint16 signed short 有符号16位数据类型 qint32 signed int 有符号32位数据类型 qint64 long
  • php7 发送邮件,使用PHP发送邮件的两种方法

    使用PHP发送邮件的两种方法 如何使用使用PHP发送邮件呢 想要知道的朋友 以下是为大家分享的使用PHP发送邮件的两种方法 供大家参考借鉴 欢迎浏览 一 使用PHP内置的mail 函数 看了一下手册 就直接开始写代码了 如下 to test
  • 超人气思维导图XMind新年新版本,这6个新功能你一定要看

    2018 年初 XMind公司推出了这款花了三年时间重写了每一行代码的新旗舰产品XMind ZEN 经过不断的优化和完善 终于成为了一款全平台 功能丰富的优秀思维导图软件 如今已然成为国内人气思维导图软件 噔噔噔 今年XMind ZEN正式
  • Java面向对象编程

    关于抽象类与最终类 下列说法错误的是 A 抽象类能被继承 最终类只能被实例化 B 抽象类和最终类都可以被声明使用 C 抽象类中可以没有抽象方法 最终类中可以没有最终方法 D 抽象类和最终类被继承时 方法可以被子类覆盖 答案 D 已知表达式i
  • 【wpf,C#】wpf访问连接Oracle数据库的详细过程及代码(第2种方法)

    注 之前写了一篇很详细的wpf连接Oracle的过程及代码 这一篇是另外一种方法 文件是我们自己写的 小伙伴们 亦可以完成此功能 1 添加引用文件 System Data OracleClient 如图 2 新建一个类 我这里命名为 MyO
  • 【JavaScript】(四)创建对象的7种模式

    面向对象的语言有一个标志 那就是他们都有类的概念 而通过类可以创建多个具有相同属性和方法的对象 ECMAScript的对象没有类的概念 因此它的对象也与基于类的语言对象有所不同 早期JavaScript开发人员创建类的方法是创建一个Obje
  • 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 的那 两个 整数,并返回它们的数组下标。

    题目信息 给定一个整数数组 nums 和一个整数目标值 target 请你在该数组中找出 和为目标值 的那 两个 整数 并返回它们的数组下标 你可以假设每种输入只会对应一个答案 但是 数组中同一个元素不能使用两遍 你可以按任意顺序返回答案
  • 2021-2022学年度第二学期21级Java程序设计理论模拟考试

    说明 由于看pdf太难受了 重新编辑好放到博客上 方便自己复习 正确答案加粗标红 考试试卷 页码 1 4 试卷名称 2021 2022学年度第二学期21级Java程序设计理论模拟考试 3 4 6班 期末考试考试课程 Java语言程序设计 考

随机推荐