统计求最大、最小元素的平均比较次数
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define NMAX 10
int rando(int a[],int n){
int i;
for(i=0;i<n;i++)
a[i]=rand()%20+1;
}
int MaxMin(int a[],int &CompCount){
int Max=a[0];
int Min=a[0];
CompCount=0;
int i;
for(i=1;i<10;i++){
if(a[i]>Max){
CompCount++;
Max=a[i];
}
else{
if(a[i]<Min){
CompCount++;
Min=a[i];
}
}
}
printf("比较次数:%d 最大数:%d 最小数:%d\n",CompCount,Max,Min);//打印可以放在自定义函数中
}
int main(){
int a[NMAX];
int n=10;//10个数字
int Comp=0,sumComp=0;
srand((unsigned)time(NULL));//随机数种子,保证每次出来的随机数不一样
for(int m=0;m<10;m++){
rando(a,n);
printf("第%d次十个随机数是:\n",m+1);
for(int i=0;i<10;i++)
printf("%d ",a[i]);
printf("\n");
MaxMin(a,Comp);
sumComp+=Comp;
}
printf("执行10次元素平均比较次数:%.2lf",1.0*sumComp/10);
}
``
心得:
1.宏定义(#define与引入头文件均不需要分号)
2.printf放在自定义函数中,就不需要传参数在主函数中输出啦
3.随机数
1.用rand函数,必须引入#include<stdlib.h>头文件
2.公式:rand()%(大-小+1)+小,如随机10~20的数,即rand()%11+1
3.使用时必须搭配 srand函数
srand函数作用:随机数初始化函数
若将srand()括号中的数设为定值,那么这次出现的随机数与下次出现的随机数一样
如 srand(1); 随机三个数,这次随机出来的是 8,9 ,10 那么下次运行随机出来的也是8,9,10
所以我们要将srand括号里的参数设为一直变化的值,比如时间
4.获取时间的方法:
1.引入头文件 #include<time.h>
2.使用函数 time(NULL);
5.配合srand使用:
因为time(NULL)函数传回来的是时间类型的参数,所以我们把它变为无类型的 ,(unsigned)time(NULL)
即srand((unsigned)time(NULL));
问题目标:随机产生10个数字,找出其中最大和最小元素并统计平均比较次数
选择的数据结构:数组
算法策略:
版权声明:本文为StuAdrew原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。