CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Java >  J2EE / EJB / JMS

救命!某大公司程序员笔试题!答中有重奖!超难算法

楼主poyi_820921()2006-03-30 09:50:27 在 Java / J2EE / EJB / JMS 提问

是的这样的:  
   
              有十种水果:     a   有550个,b   有600个,c   有700个,d   有700个,e   有650个,f   有500个,g   500个,h   有600个,i   有600个,j   有500个  
   
            现在有个1000人小学校,要求把这些水果平均分到孩子手里  
   
                      一年级         200人         每人要求分到:9个  
   
                      二年级         100人           每人要求分到:8个  
   
                    三年级             200人         每人要求分到:5个  
   
                  四年级             100人           每人要求分到:3个  
   
   
                五年级             200人               每人要求分到:6个  
   
                六年级           200人                   每人要求分到:4个  
   
   
          要求:要每个人手里实际分到的水果和要求分到的水果恰好相等,没人多拿没人少拿,  
   
        并且所有水果全部分完,一个不剩  
   
        还有一点要求,就是每个人手里的水果不能有重复品种的水果的,也就是说,比如:某人手里不能同时拿到两个A水果,这样是错误的做法  
   
    请各位老大救命,小弟谢了,最好发个源程序,任何语言做的都可以,发到xyz_133676984281@yahoo.com.cn里  
   
  我看行了,再和你联系,买你的源代码,谢谢  
   
  问题点数:20、回复次数:14Top

1 楼wizardblue()回复于 2006-03-30 10:19:55 得分 0

按照每个人要求的个数降序排列  
  一年级   200人   每人要求分到:9个  
  二年级   100人   每人要求分到:8个  
  五年级   200人   每人要求分到:6个  
  三年级   200人   每人要求分到:5个  
  六年级   200人   每人要求分到:4个  
  四年级   100人   每人要求分到:3个  
   
  然后依次发过去  
  水果的种类按个数升序排列  
   
  起始状态  
  对水果按个数多少降序排  
      c       d       e       b       h       i       a       j       f       g  
      700   700   650   600   600   600   550   500   500   500  
  发完一年级后  
            c       d       e       b       h       i       a       j       f       g  
            700   700   650   600   600   600   550   500   500   500  
  -200  
            500   500   450   400   400   400   350   300   300   500    
   
  再对水果进行降序排  
  g         c       d       e       b       h       i       a       j       f        
  500     700   700   650   600   600   600   550   500   500    
  500     500   500   450   400   400   400   350   300   300    
  发完二年级后  
            g         c       d       e       b       h       i       a       j       f        
          500     500   500   450   400   400   400   350   300   300    
  -100      
          400   400   400   350   300   300   300   250     300   300  
     
  再对水果进行降序排  
    g         c       d       e     j       f       b       h       i       a      
    400   400   400   350   300   300   300   300   300   250      
   
  再分五年级  
              g         c       d       e     j       f       b       h       i       a      
              400   400   400   350   300   300   300   300   300   250    
  -200  
              200   200   200   150   100   100   300   300   300   250  
   
  再对水果进行降序排  
  b       h       i       a         g         c       d       e     j       f            
  300   300   300   250     200   200   200   150   100   100    
   
  再分三年级  
            b       h       i       a         g         c       d       e     j       f            
            300   300   300   250     200   200   200   150   100   100    
  -200  
            100   100   100   50       0       200   200   150   100   100  
   
  再对水果进行降序排  
    c       d       e       j       f         b       h       i       a         g              
    200   200   150   100   100     100   100   100   50       0        
   
  再分六年级  
            c       d       e       j           f         b       h       i       a         g              
            200   200   150   100       100     100   100   100   50       0        
  -200  
            0       0         0       50       0         0       100   100   50       0  
   
  再对水果进行降序排  
    h       i       a     j       c       d         e       j         f         b               g          
    100   100   50     50   0       0         0       0         0         0               0  
  再分四年级  
          h       i           a       j             c       d         e       j         f         b               g          
          100   100       50     50           0       0         0       0         0         0               0  
  -100  
          0       0             0       0             0       0       0       0           0         0               0  
   
   
   
   
   
   
  Top

2 楼wizardblue()回复于 2006-03-30 10:31:20 得分 0

算法:我就用伪码写了自己改成某种语言的  
  Array   f->水果的数组     f[i]   表示该种水果当前的数量  
  indexF->sort(indexF)使indexF   按f[i]值   降序排列  
   
  Array   g->要发水果的年级数组   g[i]表示该年级每个学生所要发的水果数  
  indexG->sort(indexG)使indexG按g[i]值降序排列  
   
  当前年级     gCurrent   ->   indexG[0];  
  do    
        给当前年级发所需的n种水果,(如果当前的某种水果数不足所需的数量,后面一种补充上来,并                     且要保证后面一种只发一次)   (上面的例子中发六年级的时候可能处理不妥,即e   150   ,j100,)发完所需的200之后,j的50   不能再发)  
   
         
        f[i]->f[i]减去已经发的水果  
        indexF->sort(indexF)  
   
         
   
  while   所有年级还没有发完  
     
  Top

3 楼lilijr(beavers)回复于 2006-03-30 10:31:46 得分 0

仿照楼上一下  
  按照每个人要求的个数降序排列  
  一年级   200人   每人要求分到:9个  
  二年级   100人   每人要求分到:8个  
  五年级   200人   每人要求分到:6个  
  三年级   200人   每人要求分到:5个  
  六年级   200人   每人要求分到:4个  
  四年级   100人   每人要求分到:3个  
   
  水果的种类按个数降序排列  
  c   d   e   b   h   i   a   j   f   g  
  700   700   650   600   600   600   550   500   500   500  
  按年级分发,每发一人水果的种类按个数降序排列一次,  
  依次去所需水果种类个数  
   
  这样效率低了一点,但算法简单一些Top

4 楼wizardblue()回复于 2006-03-30 11:26:00 得分 20

也就O(n*n*log(n))Top

5 楼poyi_820921()回复于 2006-03-30 11:41:37 得分 0

wizardblue(不死鱼)   ,lilijr(beavers)大哥,谢谢你们先,可你们的用法我也用过了,最后的结果是,不是水果没分完,就是有人多拿,或少拿,拜托各位再想想,如果是一般的问题,我也不会拿来这里了Top

6 楼wizardblue()回复于 2006-03-30 11:45:03 得分 0

最后不是    
  h   i   a   j   c   d   e   j   f   b   g  
  100   100   50   50   0   0   0   0   0   0   0  
  -100  
  0   0   0   0   0   0   0   0   0   0   0  
  了么?Top

7 楼wizardblue()回复于 2006-03-30 11:47:07 得分 0

楼主上面的例子哪里有错误,或者是是几年级的学生多拿了么,帮么指出Top

8 楼poyi_820921()回复于 2006-03-30 11:49:56 得分 0

我看懂了,谢谢,怎么联系?Top

9 楼lilijr(beavers)回复于 2006-03-30 11:54:59 得分 0

没有设定条件  
   
  就是当一种水果数目不过一个年级的学生事要有多个水果的组合Top

10 楼poyi_820921()回复于 2006-03-30 11:55:04 得分 0

好人一生平安,wizardblue(不死鱼),我要向你学习,多多帮助弱者Top

11 楼wizardblue()回复于 2006-03-30 11:55:10 得分 0

看来还得自己写代码,搞了半天Top

12 楼lilijr(beavers)回复于 2006-03-30 11:56:39 得分 0

这么多错字真是丢人  
   
  没有设定条件  
   
  就是当一种水果数目不够一个年级的学生时要用另一种水果的条件,每次派发水果都要有判断Top

13 楼poyi_820921()回复于 2006-03-30 11:58:50 得分 0

还是CSDN好人多呀Top

14 楼poyi_820921()回复于 2006-03-30 12:01:13 得分 0

已经发分给你了,wizardblue(不死鱼)   ,想认识你,可以吗?交个朋友Top

相关问题

  • 救命!某大公司程序员笔试题!答中有重奖!超难算法
  • 救命!某大公司程序员笔试题!答中有重奖!超难算法
  • 救命!某大公司程序员笔试题!答中有重奖!超难算法
  • 救命!某大公司程序员笔试题!答中有重奖!超难算法
  • 救命!某大公司程序员笔试题!答中有重奖!超难算法
  • 程序员试题
  • Microsoft程序员测试题
  • 微软程序员考试题
  • 某公司招VC程序员试题
  • 程序员试题,高手请进!!!

关键词

  • 学生
  • 水果
  • 要求分
  • 年级200人每人
  • 年级的学生
  • 条件
  • 人
  • 要求

得分解答快速导航

  • 帖主:poyi_820921
  • wizardblue

相关链接

  • CSDN Java频道
  • Java类图书
  • Java类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo