免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: hll
打印 上一主题 下一主题

[算法] 今天面试栽在这个小题上了 [复制链接]

论坛徽章:
0
61 [报告]
发表于 2008-03-05 18:17 |只看该作者
不是考智商 考思路

论坛徽章:
5
IT运维版块每日发帖之星
日期:2015-08-06 06:20:00IT运维版块每日发帖之星
日期:2015-08-10 06:20:00IT运维版块每日发帖之星
日期:2015-08-23 06:20:00IT运维版块每日发帖之星
日期:2015-08-24 06:20:00IT运维版块每日发帖之星
日期:2015-11-12 06:20:00
62 [报告]
发表于 2008-03-05 18:32 |只看该作者
呵呵,当然了无数次的交换自然能出结果。我想题目不是要考察的这个。

首先最重的和第2重的不可能在一组,因此可以吧最重的和第二重的分开。

最轻的应该和最重的一组。这样好像是没问题的。

但是不知道剩下的就怎么分了。

论坛徽章:
0
63 [报告]
发表于 2008-03-05 18:47 |只看该作者

回复 #62 ssffzz1 的帖子

错了吧,10、9、8、7、6、0

论坛徽章:
0
64 [报告]
发表于 2008-03-05 19:36 |只看该作者
原帖由 yangtou 于 2008-3-5 18:47 发表
错了吧,10、9、8、7、6、0

汗,还有0重量的~~

论坛徽章:
0
65 [报告]
发表于 2008-03-05 19:40 |只看该作者

回复 #64 cugb_cat 的帖子

那就改成0.1吧

论坛徽章:
0
66 [报告]
发表于 2008-03-05 22:07 |只看该作者
恩 我已经知道算法了。新的

论坛徽章:
0
67 [报告]
发表于 2008-03-06 08:18 |只看该作者
这题目8年前偶也被考过,我用了将近10分钟解出 考得是逻辑思维能力

学文科的估计可以直接放弃了

论坛徽章:
0
68 [报告]
发表于 2008-03-06 09:07 |只看该作者
原帖由 yuhuohu 于 2008-3-6 08:18 发表
这题目8年前偶也被考过,我用了将近10分钟解出 考得是逻辑思维能力

学文科的估计可以直接放弃了

给说说答案哈~~

论坛徽章:
0
69 [报告]
发表于 2008-03-06 10:18 |只看该作者

回复 #1 hll 的帖子

应该按照重的先放把。
linux下代码如下
// g++ -o ball ball.cpp
#include <stdlib.h>
#include <time.h>
#include <iostream>

using namespace std;

class Ball;

class Balance {
        int left, right;
        int left_num;
        int right_num;
public:
        Balance() {       
                left = right = 0;
                left_num = right_num = 0;
        }
        bool IsLeftWeight() {
                if(left > right)
                        return true;
                else
                        return false;
        }
        void Reset()
        {
                left = right = 0;
        }
        bool IsLeftFull()
        {
                return left_num >= 4;
        }
        int AddWeightOnLeft(bool Left, int weight) {
                if(Left) {
                        left_num++;
                        left += weight;
                        cout << "Left now: "<< left << endl;
                }
                else {
                        right_num++;
                        right += weight;
                        cout << "Right now: "<< right << endl;
                }
        }       
};

class Ball {
        int weight;
public:
        Ball() {        weight = rand()%10000;        }
        friend ostream& operator<< (ostream &os, const class Ball &ball)
        {        return os << ball.weight;        }       
        friend bool operator > (Ball & ball1, Ball & ball2)
        {
                return ball1.weight > ball2.weight;
        }
        /*friend bool operator > (Ball * const ball1, Ball * const ball2)
        {
                return ball1->weight > ball2->weight;
        }*/
        Ball(int Weight) : weight(Weight) {}
        int GetWeight() {        return weight;        }
};

int main()
{
        srand(time(NULL));
        Balance balance;
        Ball balls[10];
        Ball *ptrballs[10];
        for(int i = 0; i < 10; i++)
        {
                cout << balls << '\t';
                ptrballs = &balls;
        }
        cout << endl;
        Ball *tmp;
        for(int i = 0; i < 10; i++)
        {
                for(int j = i+1; j < 10; j++)
                {
                        if(*(ptrballs) > *(ptrballs[j]))
                        {
                                tmp = ptrballs;
                                ptrballs = ptrballs[j];
                                ptrballs[j] = tmp;
                        }               
                }
        }
        for(int i = 0; i < 10; i++)
        {
                cout << *ptrballs << '\t';
        }
        cout << endl;
       
        Ball *start;
        for(int i = 9; i >= 0; i--)
        {
                start = ptrballs;
                if(balance.IsLeftWeight() && !balance.IsLeftFull())
                        {
                                balance.AddWeightOnLeft(false, start->GetWeight());
                        }
                        else
                                balance.AddWeightOnLeft(true, start->GetWeight());
        }
        return 0;
}

[ 本帖最后由 bugboy_bugboy 于 2008-3-6 16:32 编辑 ]

论坛徽章:
0
70 [报告]
发表于 2008-03-06 11:25 |只看该作者
看了前几楼,我觉得就是 人肉冒泡排序。。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP