设计一个c语言程序,用最少的比较次数,搜索整型数组中的最大和最小数 从n个数里面找最大的两个数理论最少需要比较多少次
bool find_MinMax(int a[], int n, int &Max, int &Min) { //从n个数中找出最大值Max与最小值Min
int max, min, i;
if(n < 1) return false; /*如果是空列,则返回失败*/
if(n == 1){ /*如果只有一个元素,则这个元素既是最大元又是最小元*/
Max = a[0], Min = a[0];
return true;
}
if(a[0] > a[1]) { /*先假定a[0]与a[1]中的较大元为最大元、较小元为最小元*/
Max = a[0], Min = a[1];
}
else {
Max = a[1], Min = a[0];
}
for(i = 1; 2 * i < n - 1; i++) {/*然后每两个为一组进行处理*/
if(a[2 * i] > a[2 * i + 1]) {
max = 2 * i, min = 2 * i + 1;
}
else {
max = 2 * i + 1, min = 2 * i;
}
if(a[max] > Max) Max = a[max];
if(a[min] < Min) Min = a[min];
}
if(n % 2) { //如果元素总个数为奇数,则处理最后的这个落单的元素
if(a[n - 1] > Max) Max = a[n - 1];
else if(a[n - 1] < Min) Min = a[n - 1];
}
return true;
}
int arr[6]={2,3,45,6,78};
int max=arr[0];
int min=arr[0];
for(int i=0;i<6;i++)
{
if(max<arr[i])max=arr[i];
if(min>arr[i])min=arr[i];
}
printf......
更多交流参考我空间文章。
如果数组中的值没有规律,这个恐怕没有太好的办法,只有从头到尾比较一遍。
int max = a[0];
int min = a[0];
for( i = 1; i < N; ++i )
{
int tmp = a[i];
if ( tmp > max ){ max = tmp; }
if ( tmp < min ){ min = tmp; }
}
NOIP2014 同时查找2n个数中的最大值和最小值,最少比较次数为( )。 A. 3(n-2)/2 B. 4n-2 C. 3n-2 D. 2n-2~
前两个数比较,大的为最大值, 小的为最小值, 用掉一次比较
后面2*(n-1)个数, 每两个比较, 大的同最大值比较, 小的同最小值比较, 3*(n-1)次比较,
共3*(n - 1) + 1 = 3n - 2次比较
从n个数里面找最大的两个数理论最少需要比较的次数为:n+ logn -2
解析一:类似比赛晋级,两两配对比较,赢的再两两配对,最后得到冠军(最大的数),可以看成是一棵二叉树,以4人为例:
0
0 2
0 1 2 3
可以看出,找出最大的数比较次数是n-1。然后第二大的数肯定是跟冠军比较过的数字,那么很明显每一层都有一个,所以有logn-1次比较。 所以总共是n+logn-2次比较。
解析二:冒泡法找最大比较次数为n-1,然后再在之前每一次比较的结果里面找第二大的数,比较的次数为logN,需要减去最后一次最大数的比较,即求第二个数是logN-1,结果就是n+ logn -2。
求编写一个C语言的程序
答:include<stdio.h>#include#include<stdlib.h>#define N 10void main(){srand((int)time(NULL));//随机数种子struct Student{char name[20];//int num;};int i=0,num,a,b,c,j;Student stu[10],st;printf("请输入10名竞选者的名字\n");for(i=0;i<10;i++){scanf("%s",stu[i]...
用C语言写一个很简单的程序,输入两个整数a,b,要求输入a-b的值,例如...
答:include<stdio.h> main(){ int a,b;printf("请输入A和B:");scanf("%d%d",&a&b);printf("a-b的差为:%d",a-b);}
求c语言程序:用一个函数求N个数的最大值和最小值。。。
答:int min;int maxmin(int n){int i,x,f;scanf("%d",&f);min=f;for(i=1;i<n;i++){scanf("%d",&x);if(x>f)f=x;else if(x<min)min=x;} return f;} int main(){int n,mm;printf("有几个数:");scanf("%d",&n);mm=maxmin(n);printf("其中最大的数是:%d\n最小...
用C语言编一程序,输入三个整数,输出其中最小的数
答:可以参考以下的代码:include <stdio.h> void main(){ int a,b,c,min;scanf("%d%d%d",&a,&b,&c);min=a;if(min>b) min=b;if(min>c) min=c;printf("min=%d\n",min);}
设计一个C语言程序, 从键盘上输入a,b,c三个整数,输出其中的最小者
答:include<stdio.h> void main(){ int a,b,c;scanf("%d%d%d",&a,&b,&c);//从键盘上输入a,b,c三个整数 if(a<b){ if(a<c)printf("%d",a);//输出其中的最小者 else printf("%d",c);//输出其中的最小者 } else { if(b<c)printf("%d",b);//输出其中的最小者 else prin...
...你当玩家的21点游戏这是一个C语言程序,跪求C语言大神解答!!!_百度...
答:if(player_card[i]>1 && player_card[i]<10) //输出玩家抽到的牌的点数 printf("您抽到的第%d张牌是%d\n",i+1,player_card[i]);else if(player_card[i]==10)printf("您要到的第%d张牌是%c\n",i+1,player_ch);else printf("您要到的第%d张牌是A\n",i+1);if(player_...
用c语言编写程序
答:include<iostream.h> void main(){ double a;double b;cout <<"输入账单:";cin >> a;if(a<=100)b = 10;if(a>100)b = a/10;cout<<"小费:"<< b <<endl;}
用c语言编写一个程序
答:应该多给几个例子,n=10的时候如何处理?得到10,110,210,1210等等?若是这样的,试试下面程序:/ 用c语言编写一个程序:对于一个自然数n(n<=50),统计具有下列数字的个数,并输出所有符合条件的数字:自然数n,在n的左边加上一个自然数,但该自然数不能超过原数的一半;继续按此规则进行处理,...
c语言 利用排序程序求十个数中最大值和最小值的差
答:if((a[j]-a[j+1])>0.0001)//浮点类型的数不能直接比较大小,因为精度问题,所以设置一个精度值 { temp=a[j];a[j]=a[j+1];a[j+1]=temp;} } } int main(){ float max,mix;float a[10];input(a,10);//调用输入函数 sort(a,10);//调用排序函数 max=a[9];//最大值是...
如何用C语言写程序:输入一个长度小于100的字符串,统计标点符号个数...
答:在英文字符中,只要不是空格数字或字母,就都属于是标点或符号的范围,所以这样的话,整个程序就比较好写了:include<stdio.h> istdio.<ctype.h> int main(){ int n=0;char c;while((c=getchar())!='\n')if(c!=' '&&!isalnum(c))n++;printf("%d\n",n...