通过随机数生成办法,向int num[10][10]的数组 中存入数据并找出数组的最大、最小值及其下标。

本文介绍了一个使用C语言实现的程序,该程序能够生成一个5x5的二维数组,并找到数组中的最大值与最小值及它们的位置。通过srand()函数确保随机数种子的初始化,然后利用rand()函数生成0到9之间的随机整数填充数组。
/*
通过随机数生成办法,向int num[10][10]的数组
中存入数据并找出数组的最大、最小值及其下标。
*/
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define R 5
#define C 5
int main(void)
{
	int i,j;
	int num[R][C];
	int max, max_i, max_j, min, min_i, min_j;
	srand(time(NULL));

	for(i = 0; i < R; i++){
		for(j = 0; j < C; j++)
			num[i][j] = rand()%10;

	}
	for(i = 0; i < R; i++){
		for(j = 0; j < C; j++){
			printf("%5d", num[i][j]);
		}
		printf("\n");
	}

		printf("\n\n");
	max = min = num[0][0];
	max_i = max_j = 0;
	min_i = min_j = 0;
	for(i = 0; i < R; i++){
		for(j = 0; j < C; j++){
			if(max < num[i][j]){
				max = num[i][j]; max_i = i; max_j = j;
			}
			if(min > num[i][j]){
				min = num[i][j]; min_i = i; min_j = j;
			}
		}
	}
	
	printf("max:%d at:%d %d\n", max, max_i, max_j);
	printf("min:%d at:%d %d\n", min, min_i, min_j);

	return 0;
}


-------------------------------------------
    3    6    7    8    0
    5    7    9    1    5
    4    4    9    4    0
    1    2    2    5    0
    5    0    9    2    3


max:9 at:1 2
min:0 at:0 4





#include <iostream> #include <cstdlib> #include <ctime> #include <algorithm> // 用于 sort using namespace std; const int Max = 10; // 元素个数 const int RangeMin = 1; // 数值范围最小值 const int RangeMax = 1000; // 数值范围最大值 void Creat(int r[], int n); // 生成不重复的随机数排序 int BinSearch(int r[], int n, int k, int &count); // 折半查找 int main() { int a[Max + 1]; // a[1..Max] 存放数据,a[0] 可用作辅助 int location = 0, count = 0; int k; srand(time(0)); // 初始化随机种子 Creat(a, Max); // 生成不重复且有序的数据 cout << "生成的有序序列: "; for (int i = 1; i <= Max; i++) cout << a[i] << " "; cout << endl; // 随机选择一个存在的元素进行查找(确保能找到) k = a[1 + rand() % Max]; cout << "正在查找元素: " << k << endl; location = BinSearch(a, Max, k, count); if (location == 0) cout << "数据不存在,共比较 " << count << " 次" << endl; else cout << "元素 " << k << " 在序列中的序号是 " << location << ",共比较 " << count << " 次" << endl; return 0; } // 生成 n 个 [RangeMin, RangeMax] 内不重复的随机数存入 r[1..n],然后排序 void Creat(int r[], int n) { bool *used = new bool[RangeMax - RangeMin + 1]{}; // 标记是否已使用 int num, count = 0; // 生成不重复的随机数 while (count < n) { num = RangeMin + rand() % (RangeMax - RangeMin + 1); if (!used[num - RangeMin]) { used[num - RangeMin] = true; r[++count] = num; } } delete[] used; // 排序(使数组有序,满足二分查找条件) sort(r + 1, r + n + 1); } // 折半查找:在有序数组 r[1..n] 中查找 k // 返回索引位置,0 表示未找到 int BinSearch(int r[], int n, int k, int &count) { int low = 1, high = n; count = 0; while (low <= high) { int mid = (low + high) / 2; count++; // 每次进入循环都是一次比较 if (k < r[mid]) { high = mid - 1; } else if (k > r[mid]) { low = mid + 1; } else { return mid; // 找到,返回下标 } } return 0; // 未找到 } 写出程序对应的 结构化算法描述文本
最新发布
11-20
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值