帮朋友写的一个作业,题目和代码如下:
已知一个数组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;
}