但,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<10-1;i++)
for(j=1;j<10;j++)
if(a[j]>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<10;i++)
scanf("%d",&a[i]);
max=a[0];
for(i=1;i<10;i++)
if(a[i]>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 ----------------解决方案--------------------------------------------------------