#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>
/*
1. 随机构造一个长度为N数组,使得该数组的某个元素的重复了N/2次以上。
2. 统一一个数组中各元素的重复数(出现的次数)
*/
// n>2才好
int create_array(int arr[], int n)
{
int i, j;
srand(time(NULL));
// 随机决定一个元素
int value = rand() % 1000;
// 随机决定它出现的次数 (n/2 ~n)之间吧
int half = n / 2;
int times = rand() % half + half; // n/2 ~n之间
// 清空为-1
for(i=0; i<n; i++)
arr[i] = -1;
// 该元素插入数组,随机插入times次
for(i=0; i<times; i++)
{
int pos = rand() % n; // 决定其位置
// 插入数组,如果该位置已经有值,则后移一位插入
// 尝试n次,总能找到一个空位置
for(j=0; j<n; j++)
{
int pa = (pos + j) % n;
if(arr[pa] == -1) // 找到一个空位置
{
arr[pa] = value;
break;
}
}
}
// 其他位置插入随机数
for(i=0; i<n; i++)
{
if(arr[i] == -1)
arr[i] = rand() % 1000;
}
return 0;
}
// 统计各元素出现的次数
// result[i][2]: 第一列为元素的值,第二列为元素的重复数
int statistics(int arr[], int result[][2], int n)
{
int i, j;
int count = 0; // 元素的种类
// 计数清0
for(i=0; i<n; i++)
result[i][1] = 0;
for(i=0; i<n; i++)
{
int a = arr[i];
// 看是否已经有记录
bool exist = false;
for(j=0; j<count; j++)
{
if(result[j][0] == a)
{
result[j][1] +=1; // 重复次数+1
exist = true;
break;
}
}
// 如果发现一个新元素,则记录之
if(!exist)
{
result[count][0] = a;
result[count][1] = 1; // 出现1次
count ++;
}
}
return count; // 有多少种元素
}
int main()
{
int i;
int arr[10];
// 随机创建随机数组
create_array(arr, 10);
printf("array: \n");
for(i =0; i<10; i++)
printf("%d ", arr[i]);
printf("\n\n");
// 统计元素出现的次数
int result[10][2];
int count = statistics(arr, result, 10);
for(i=0; i<count; i++)
{
printf("%4d: occur %d times\n", result[i][0], result[i][1]);
}
return 0;
}
C++练习:随机构造数组
最新推荐文章于 2024-08-21 11:45:50 发布
本文展示了如何使用C++编程语言构造一个包含重复元素的数组,并统计数组中各元素出现的次数。代码包括`create_array`函数用于生成随机数组,以及`statistics`函数用于统计元素的重复数。在`main`函数中,数组被打印并展示其元素的统计信息。

1万+

被折叠的 条评论
为什么被折叠?



