随机函数生成20个不同的2位整数填充数组,从小到大排列,然后在插入一个2位整数,输出打印

帮朋友写的一个作业,题目和代码如下:
已知一个数组a大小为20个元素,用随机函数生成20个不同的2位整数填充该数组,再将该数组元素从小到大排序。现要求任意输入一个2位整数,要求将该数插入数组中合适的位置,使得这个数组中的21个元素仍然按照从小到大的顺序排列,并将数组按下标顺序输出。

#include <iostream>
#include <cstdlib>
#include <ctime>

int main(int argc, char* argv[]) {

	int a[20];//数组a大小为20个元素

	// 随机函数生成20个不同的2位整数填充改数组
	srand(time(0)); //把系统的秒数设置为随机数的种子
	for (int i = 0; i < 20;) {//i表示当前要生成的随机数下标
		int val = 0;
		bool isequal = false;//标志当前生成的随机数是否和前面的数相等,默认不相等

		while (val < 10) {//确保随机生成的整数为2位整数
			val = rand()%100;//rand()%RAND_MAX会返回一个随机数,范围在[0, RAND_MAX)间
		}

		// 确保当前生成的随机数和前面的数不一样
		for (int j = 0; j < i; j++) {//j表示已经生成的随机数下标
			if (a[j] == val) {//当生成的随机数已经存在时,应重新生成随机数
				isequal = true;
				break;
			}
		}

		if (isequal == false) {//当前生成的随机数和之前的数不同时才获取,然后i+1
			a[i] = val;
			i++;
		}
	}

	// 数组元素从小到大排序,最直观的冒泡排序即可
	for (int i = 19; i >= 1; i--) {
		for (int j = 0; j <= i - 1; j++) {
			if (a[j] > a[j + 1]) {
				int tmp = a[j];
				a[j] = a[j + 1];
				a[j + 1] = tmp;
			}
		}
	}

	// 输入一个2位整数
	int insert = 0;
	while (insert < 10 || insert >= 100) {
		std::cout << "Please input a number([1, 99]):";
		std::cin >> insert;
	}
	
	// 将该数插入数组中合适的位置,使得这个数组中的21个元素仍然按照从小到大的顺序排列
	int b[21];
	bool isinsert = false;//标识该数是否已插入数组

	if (insert >= a[19])//如果要插入的数比a数组中的所有数都大,则应排到最后一个
		b[20] = insert;

	for (int i = 0; i < 21; i++) {
		if (!isinsert) {//如果没插入数组
			if (insert < a[i]) {//如果未插入数组,且在当前位置插入,则插入数值,isinsert设为true
				b[i] = insert;
				isinsert = true;
			}
			else {//如果未插入数组,且不在当前位置插入,则a[i]不用后移,b[i]=a[i]
				b[i] = a[i];
			}
		}
		else {//如果已经插入数组,a[i]后移一格
			b[i] = a[i - 1];
		}
	}
	

	for (int i = 0; i < 21; i++) {
		std::cout << b[i] << std::endl;
	}

	while (1) {}
	return 0;
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值