有一长度为10的整型数组,数组中的元素通过随机方法生成,数组元素的大小在0-100之间,同时找出数组中值最大和最小的元素,并输出
min初值101,max初值0,循环遍历数组,找到最大值和最小值,示例代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main() {
int arr[10];
// 用当前时间作为随机数种子
srand(time(NULL));
// 生成随机数组
for (int i = 0; i < 10; i++) {
arr[i] = rand() % 101; // 生成0-100之间的随机数
}
printf("生成的随机数组为: ");
for (int i = 0; i < 10; i++) {
printf("%d ", arr[i]);
}
// 找出最大值和最小值
int min = 101;
int max = 0;
for (int i = 1; i < 10; i++) {
if (arr[i] < min) {
min = arr[i];
}
if (arr[i] > max) {
max = arr[i];
}
}
// 输出结果
printf("\n");
printf("最小值:%d\n", min);
printf("最大值:%d\n", max);
return 0;
}
可以在一个循环下,产生10个随机数存入数组,同时计算其最大值和最小值,最后打印结果就可以了。
测试代码如下:
参考链接:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void){
int nums[10]; //长度为10的数组
int max,min; // 分别存储数组最大值和最小值的变量
//https://zhuanlan.zhihu.com/p/451608851
srand((unsigned long)time(NULL)); // 使用当前时间来产生随机数种子
for(int i=0;i<10;i++){
nums[i] = rand()%101; // 产生一个0-100之间的整数来存入数组当前元素
if(i==0){ // 如果是数组第一个数,则把它赋值给最大值和最小值
max=min=nums[0];
}else{ // 数组其他位置的数,则比较计算最大值和最小值
// 判断最大值
if(max<nums[i]){
max=nums[i];
}
// 判断最小值
if(min>nums[i]){
min=nums[i];
}
}
printf("%d ",nums[i]); //打印产生的随机数
}
printf("\n");
// 打印结果
printf("数组最大值为:%d.\n",max);
printf("数组最小值为:%d.\n",min);
return 0;
}
程序分析:
假设该数为 x。
1、则:x + 100 = n2, x + 100 + 168 = m2
2、计算等式:m2 - n2 = (m + n)(m - n) = 168
3、设置: m + n = i,m - n = j,i * j =168,i 和 j 至少一个是偶数
4、可得: m = (i + j) / 2, n = (i - j) / 2,i 和 j 要么都是偶数,要么都是奇数。
5、从 3 和 4 推导可知道,i 与 j 均是大于等于 2 的偶数。
6、由于 i * j = 168, j>=2,则 1 < i < 168 / 2 + 1。
7、接下来将 i 的所有数字循环计算即可。
具体实现如下:
#include <stdio.h>
int main (void)
{
int i, j, m, n, x;
for (i = 1; i < 168 / 2 + 1; i++)
{
if (168 % i == 0)
{
j = 168 / i;
if ( i > j && (i + j) % 2 == 0 && (i - j) % 2 == 0)
{
m = (i + j) / 2;
n = (i - j) / 2;
x = n * n - 100;
printf ("%d + 100 = %d * %d\n", x, n, n);
printf ("%d + 268 = %d * %d\n", x, m, m);
}
}
}
return 0;
}
以上实例输出结果为:
-99 + 100 = 1 * 1
-99 + 268 = 13 * 13
21 + 100 = 11 * 11
21 + 268 = 17 * 17
261 + 100 = 19 * 19
261 + 268 = 23 * 23
1581 + 100 = 41 * 41
1581 + 268 = 43 * 43
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define LEN 10
void findMaxAndMin(int* arr, int len, int* pMax, int* pMin) {
*pMax = *pMin = arr[0];
for (int i = 1; i < len; ++i) {
if (arr[i] > *pMax) {
*pMax = arr[i];
} else if (arr[i] < *pMin) {
*pMin = arr[i];
}
}
}
int main() {
srand(time(NULL)); // 初始化随机数种子
int arr[LEN];
for (int i = 0; i < LEN; ++i) {
arr[i] = rand() % 101; // 生成0-100之间的随机数
printf("%d ", arr[i]);
}
puts("");
int max, min;
findMaxAndMin(arr, LEN, &max, &min);
printf("max=%d, min=%d\n", max, min);
return 0;
}