| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3123 人关注过本帖, 2 人收藏
标题:任意输入一组数列,求出不相邻的两个数和的最大值。新手第高手帮一下
只看楼主 加入收藏
lintaoyn
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:4
帖 子:606
专家分:2499
注 册:2009-4-8
收藏
得分:0 
4,1,1,1,1,4
对这组数jack10141的解法得到的结果是错的,不相邻不能说明只能隔一个数的吧。

迭代的是人,递归的是神。
2010-09-09 19:25
liqinm
Rank: 2
等 级:论坛游民
帖 子:13
专家分:39
注 册:2010-8-31
收藏
得分:0 
以下是引用lintaoyn在2010-9-9 19:25:00的发言:

4,1,1,1,1,4
对这组数jack10141的解法得到的结果是错的,不相邻不能说明只能隔一个数的吧。
好像是你搞错了吧?jack10141的解法我觉得没有问题
如果按你说的他只隔一个数,那他何必用二重循环呢?

[ 本帖最后由 liqinm 于 2010-9-9 19:34 编辑 ]

my name is liqin
2010-09-09 19:32
lintaoyn
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:4
帖 子:606
专家分:2499
注 册:2009-4-8
收藏
得分:0 
对是我错了

迭代的是人,递归的是神。
2010-09-09 19:42
御坂美琴
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:魔術の禁書目錄
等 级:小飞侠
威 望:9
帖 子:952
专家分:2929
注 册:2010-8-18
收藏
得分:0 
10楼的思路不错

永远为正义而奋斗,锄强扶弱的Level 5 超能力者
とある魔術の禁書目錄インデックス__御み坂さか美み琴こと
http://bbs.bccn.net/space.php?action=threads&uid=483997
2010-09-09 21:15
jack10141
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:陕西西安
等 级:小飞侠
威 望:6
帖 子:706
专家分:2271
注 册:2010-8-10
收藏
得分:0 
回复 10楼 liqinm
这样,就会保留下最大的五个数,并且复杂度是线性的,所用的内存空间也很小,只开了个20的数组
之后再套用那个二重循环的代码,就能以非常快的速度算出答案了
不过不知道这个代码是不是一定对的,但我觉得只要留下前五大就足够了,甚至可能只需要前四大的数,不知道有没有反例呢
这个问题,可以证明,题目中最大的和由前4大(假设分别为A,B,C,D)就完全可以确定!!

题目中最大的和 必在  A+B  A+C  A+D  B+C   之内!!

Coding就像一盒巧克力,你永远不会知道你会遇到什么BUG
别跟我说你是不能的,这让我愤怒,因为这侮辱了你的智慧
2010-09-09 23:29
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
收藏
得分:0 
回复 10楼 liqinm
说错了,

[ 本帖最后由 BlueGuy 于 2010-9-11 11:59 编辑 ]

我就是真命天子,顺我者生,逆我者死!
2010-09-10 08:51
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
收藏
得分:0 
选择排序适合在 m (m很大) 个元素中 找 前n个最大的数,(n很小)。
时间复杂度为 mn, 近似于线性。

[ 本帖最后由 BlueGuy 于 2010-9-11 17:34 编辑 ]

我就是真命天子,顺我者生,逆我者死!
2010-09-11 12:07
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
收藏
得分:0 
#include <stdio.h>

typedef int Item;
#define key(A) (A)
#define less(A, B) (key(A) < key(B))
#define more(A, B) (key(A) > key(B))
#define exch(A, B) {Item t = A; A = B; B = t;}
#define compexch(A, B) if (less(B, A)) exch(A, B)

int main(void)
{
    int a[10] = {1, 3, 8, 7, 9, 9, 4, 6, 8, 10};
    int i, j, max;

    for (i = 0; i < 4; i++)
    {
        max = i;
        for(j = i + 1; j <= 10-1; j++)
        {
            if(more(a[j], a[max]))
                max = j;
        }
        exch(a[i], a[max]);
    }
   
    for (i = 0; i < 4; i++)
    {
        printf("%d ", a[i]);
    }
    getchar();
    return 0;
}


[ 本帖最后由 BlueGuy 于 2010-9-11 12:26 编辑 ]

我就是真命天子,顺我者生,逆我者死!
2010-09-11 12:24
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
收藏
得分:0 
顺便说下, 选择排序还有一个重要的应用是在元素很大、关键字很小的时候, 此时选择排序也是 线性的。

我就是真命天子,顺我者生,逆我者死!
2010-09-11 17:36
快速回复:任意输入一组数列,求出不相邻的两个数和的最大值。新手第高手帮一下
数据加载中...
 
   



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

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