| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3804 人关注过本帖
标题:如何一次循环就同时得到最大值和最小值
只看楼主 加入收藏
qhxxbc
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:163
专家分:174
注 册:2010-9-14
结帖率:95%
收藏
已结贴  问题点数:20 回复次数:12 
如何一次循环就同时得到最大值和最小值
程序说明:以下是求某数组中元素极值的一个程序
main()
{
    int a[9]={5,7,4,2,8,10,6,9,1};
    int min, x; //定义最小值及其下标
    int max, d; //定义最大值及其下标
    int i;

    min = a[0]; //将最小值暂定为第1个元素
    for(i=1;i<=8;i++) //发现比a[0]小的元素,就将这个元素定为最小并记录其下标
        {
            if (min>a[i])
            {
                min = a[i];
                x = i;
            }   
        }

    max = a[8]; //将最小值暂定为第9个元素
    for(i=7;i>=0;i--) //发现比a[8]小的元素,就将这个元素定为最大并记录其下标
        {
            if (max<a[i])
            {
                max = a[i];
                d = i;
            }   
        }

    printf ("%d %d %d %d\n", x, min, d, max);
}
问题:这个程序需要分别进行循环才能得出结果,如何能一次循环就同时得到最大值和最小值,请帮忙优化一下,谢谢!

最主要的要求是能够提高程序效率!!!
搜索更多相关主题的帖子: 最大值 
2010-12-21 22:20
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
收藏
得分:2 
两个 if 语句合在一个循环里就行, 最大值和最小值 互不影响的。

我就是真命天子,顺我者生,逆我者死!
2010-12-21 22:27
五当家
Rank: 12Rank: 12Rank: 12
等 级:火箭侠
威 望:2
帖 子:1112
专家分:3674
注 册:2010-10-20
收藏
得分:4 
程序代码:
main()
{
    int a[9]={5,7,4,2,8,10,6,9,1};
    int min, x; //定义最小值及其下标
    int max, d; //定义最大值及其下标
    int i;

    min = a[0]; //将最小值暂定为第1个元素
    for(i=1;i<=8;i++) //发现比a[0]小的元素,就将这个元素定为最小并记录其下标
        {
            if (min>a[i])
            {
                min = a[i];
                x = i;
            }       
            if (max<a[i])
            {
                max = a[i];
                d = i;
            }   
        }
    printf ("%d %d %d %d\n", x, min, d, max);
}
这样差不多吧.

经验积累中............
2010-12-21 22:40
qhxxbc
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:163
专家分:174
注 册:2010-9-14
收藏
得分:0 
回复 3楼 五当家
好像没有定max的初值吧?

非计算机专业自学新手向大家请教
2010-12-22 09:21
qhxxbc
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:163
专家分:174
注 册:2010-9-14
收藏
得分:0 
回复 2楼 BlueGuy
看起来很有道理!
但我想了好几次,不知道怎么操作,尤其是对min和max赋初值的问题。

希望哪位能具体指点一下,谢谢!

非计算机专业自学新手向大家请教
2010-12-22 09:23
cnfarer
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:179
帖 子:3330
专家分:21157
注 册:2010-1-19
收藏
得分:2 
可以将第一个元素值作为MAX和MIN的初值

★★★★★为人民服务★★★★★
2010-12-22 10:04
qhxxbc
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:163
专家分:174
注 册:2010-9-14
收藏
得分:0 
回复 6楼 cnfarer
    min = a[0];
    max = a[0];
    for(i=1;i<=8;i++)
        {
            if (min>a[i])
            {
                min = a[i];
                x = i;
            }      
            if (max<a[i])
            {
                max = a[i];
                d = i;
            }   
        }

好像本质还是一样,比较了两次,并没有提高效率。
不知我的理解对不对?

非计算机专业自学新手向大家请教
2010-12-22 10:17
qhxxbc
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:163
专家分:174
注 册:2010-9-14
收藏
得分:0 
这么长时间没得到解决,不得不自顶了。

非计算机专业自学新手向大家请教
2010-12-23 09:50
一世哀伤
Rank: 2
来 自:西电
等 级:论坛游民
帖 子:9
专家分:11
注 册:2010-12-2
收藏
得分:2 
应该不可以优化了吧,已经很简单了,如果非要在一个if语句里面循环出最大和最小反而麻烦了,比如排个序,都有了,个人感觉
2010-12-23 12:54
qhxxbc
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:163
专家分:174
注 册:2010-9-14
收藏
得分:0 
将来想解决的问题是:每个数组中有10万个元素,共有10万个这样的数组。
而这仅是一个子程序,所以想寻求优化。


非计算机专业自学新手向大家请教
2010-12-23 13:34
快速回复:如何一次循环就同时得到最大值和最小值
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016599 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved