当前位置: 代码迷 >> C语言 >> [求助]求数组A[10]中的最大值,次大值。谢谢啊
  详细解决方案

[求助]求数组A[10]中的最大值,次大值。谢谢啊

热度:225   发布时间:2005-04-03 00:40:00.0
方法大家都差不多,像6楼等等都不是用全体排序的方法,我的程序也只是6楼的一个加强版本而已,根本没什么大不了的.



但,C语言玩的就是技巧,看的就是谁构思巧妙;

如果你仅仅满足能做出这道题目,嘿嘿~~~



而且这里如果用全体排序(冒泡法)还有个效率问题,如果要比较的不只10个,而是10000个或者更多.



那么全体排序无异于是找死.


[此贴子已经被作者于2005-4-3 0:55:36编辑过]



----------------解决方案--------------------------------------------------------
#define check(a,b) (a<b)?a+=b,b=a-b,a-=b:1
int main()
{
int m[10]={110,210,-2,3,4,50,6,70,8,190},i=3,max=m[0],sec=m[1];
    for(check(max,sec);i<10;sec<=m[i]?sec=m[i],check(max,sec):1,i++);
    printf("max=%d,sec=%d\n",max,sec);
}
----------------解决方案--------------------------------------------------------
22楼的程序果然精练
但是也有弊端
假如同一个最大值有2个,就不能找出次大的
----------------解决方案--------------------------------------------------------
既然有两个就无所谓最大和次大的了吧,
全部输出
----------------解决方案--------------------------------------------------------
以下是引用神vLinux飘飘在2005-4-3 0:43:47的发言: #define check(a,b) (a<b)?a+=b,b=a-b,a-=b:1 int main() { int m[10]={110,210,-2,3,4,50,6,70,8,190},i=3,max=m[0],sec=m[1]; for(check(max,sec);i<10;sec<=m[i]?sec=m[i],check(max,sec):1,i++); printf("max=%d,sec=%d\n",max,sec); }
什么玩意????唉, 你试试 int m[10]={60000,50000,55000,..........}
----------------解决方案--------------------------------------------------------
你还不如去试int m[10]={1.1,2.2,3.3.....}
或者直接杀了我好了

----------------解决方案--------------------------------------------------------
#define N 10 #include <stdio.h> int main() { int a[N],temp[N]; int i,m,n; printf("please enter 10 intergers:\n"); for(i=0;i<N;i++) scanf("%d",&a[i]); for(m=0;m<9;m++) { for(n=m+1;n<10;n++) { if(a[m]>a[n]) { temp[m]=a[m]; a[m]=a[n]; a[n]=temp[m]; } } } printf("max=%d,second=%d",a[9],a[8]); getch(); return; } 我第一反应是这样的程序 不过神vLinux飘飘 的话确实精辟,就象敲了我一棒 呵呵 这个问题只需要最大值和次大值,应该需要考虑有没有其他更简单的方法的
----------------解决方案--------------------------------------------------------
a[10]
你排个顺序 不就都有了 排好了再引用

for(i=0;i&lt;10-1;i++)
for(j=1;j&lt;10;j++)
if(a[j]&gt;a[i]) {t=a[i]; a[i]=a[j]; a[j]=t;}
对不对啊  排好了就是 次MAX 次次MAX 都有了`
----------------解决方案--------------------------------------------------------
void main()
{
int i,max,a[10];
printf("input 10 numbers:\n");
for(i=0;i&lt;10;i++)
scanf("%d",&amp;a[i]);
max=a[0];
for(i=1;i&lt;10;i++)
if(a[i]&gt;max) max=a[i];
printf("maxmum=%d\n",max);
}

书上的
----------------解决方案--------------------------------------------------------
以下是引用神vLinux飘飘在2005-4-3 8:18:06的发言: 既然有两个就无所谓最大和次大的了吧, 全部输出
那假如有10、10、9、8、7、6、5、4、3、2,这样10个数 最大的是10,次大的是9 怎么无所谓了 按你的程序,最大和次大都是10
----------------解决方案--------------------------------------------------------
  相关解决方案