A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 胡生蒙 中级黑马   /  2012-4-25 01:14  /  2671 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

一个百万富翁遇到一个程序员,程序员找他谈一个换钱的计划,该计划如下
:程序员每天给该富翁10万元,而富翁第一天给程序员一分钱,第二天给程序员二分钱
第三天给程序员四分钱,依次类推,每一天给的钱都是前一天的两倍,直到满一个月(按30天),富翁欣然接受。
编写一个程序计算一个月后两人各的多少钱。

哪个高手能解决下

6 个回复

正序浏览
ChengXuYuan cxy = new ChengXuYuan();       
                System.out.println("30天程序员一共要给富翁:" cxy.getZong() "元");

                //30天富翁一共要给程序员:
                FuWeng fw = new FuWeng();
                System.out.println("30天富翁一共要给程序员:" fw.getZong() "元");
        }
}
回复 使用道具 举报
ChengXuYuan cxy = new ChengXuYuan();       
                System.out.println("30天程序员一共要给富翁:"+cxy.getZong()+"元");

                //30天富翁一共要给程序员:
                FuWeng fw = new FuWeng();
                System.out.println("30天富翁一共要给程序员:"+fw.getZong()+"元");
        }
}
回复 使用道具 举报
  1. package aa.demo.classes.aa;

  2. /**
  3. * 一个百万富翁遇到一个程序员,程序员找他谈一个换钱的计划,该计划如下
  4. :程序员每天给该富翁10万元,而富翁第一天给程序员一分钱,第二天给程序员二分钱
  5. 第三天给程序员四分钱,依次类推,每一天给的钱都是前一天的两倍,直到满一个月(按30天),富翁欣然接受。
  6. 编写一个程序计算一个月后两人各的多少钱。
  7. *
  8. */

  9. /////////////////////异常类//////////////////////////////////
  10. class NoMenoyException extends RuntimeException{
  11.         public NoMenoyException(String message){
  12.                 super(message);
  13.         }
  14. }


  15. ////////////////////////抽象类人///////////////////////////////
  16. abstract class PerSon{
  17.         private double menoy;
  18.         public static final double SHIWANMENOY=100000.0;//1o万
  19.         public abstract void payMenoy();
  20.         public abstract void shouYi(double menoy);
  21.         public void setMenoy(double menoy) {
  22.                 this.menoy = menoy;
  23.         }
  24.         public double getMenoy() {
  25.                 return menoy;
  26.         }
  27. }


  28. ////////////////////程序员/////////////////////////////////////////
  29. class Cxy extends PerSon{
  30.         private Fw instance=null;
  31.         private int count;
  32.         public String str;
  33.         public boolean flag;
  34.         public void setInstance(Fw instance){
  35.                 this.instance=instance;
  36.         }
  37.         @Override
  38.         public void payMenoy(){
  39.                 if(this.getMenoy()<SHIWANMENOY){
  40.                         throw new NoMenoyException("程序员没有这么多钱支付给富翁");
  41.                 }
  42.                
  43.                 count++;
  44.                 Tools.sop("\r\n");
  45.                 Tools.sop(count+"号支付情况:");
  46.                 Tools.sop("程序员付给富翁"+Tools.format(SHIWANMENOY));
  47.                
  48.                 this.setMenoy(this.getMenoy()-SHIWANMENOY);
  49.                 instance.shouYi(SHIWANMENOY);
  50.                
  51.         }

  52.         @Override
  53.         public void shouYi(double menoy) {
  54.                 this.setMenoy(this.getMenoy()+menoy);
  55.                
  56.                 Tools.sop("程序员收到富翁"+Tools.format(menoy));
  57.                 Tools.sop("\t\r程序员资金为:"+Tools.format(getMenoy()));
  58.                 Tools.sop("富翁的资金为:"+Tools.format(instance.getMenoy()));
  59.                
  60.                 if(menoy>=this.SHIWANMENOY && !flag){
  61.                         str="\r\t地"+count+"天,富翁支付的金额超过程序员支付的金额.\r\n富翁支付给程序员的金额为:"+
  62.                         Tools.format(menoy).toString()+"\r\n超出"+Tools.format(this.SHIWANMENOY-menoy)+"\r\t" +
  63.                                 "程序员资金为:"+Tools.format(getMenoy())+"\r\t"+
  64.                                 "富翁的资金为:"+Tools.format(instance.getMenoy())+"\r\t";
  65.                         flag=true;
  66.                 }
  67.         }
  68.        
  69. }

  70. //////////////////////////////富人////////////////////////////////////////
  71. class Fw extends PerSon{
  72.         private double payMenoy=0.01;
  73.         private Cxy instance=null;
  74.         public void setInstance(Cxy instance){
  75.                 this.instance=instance;
  76.         }
  77.         @Override
  78.         public void payMenoy() {
  79.                 if(getMenoy()<payMenoy){
  80.                         throw new NoMenoyException("富翁没这么多钱支付给程序员");
  81.                        
  82.                 }
  83.                
  84.                 Tools.sop("富翁付给程序员"+Tools.format(payMenoy));
  85.                
  86.                 setMenoy(getMenoy()-payMenoy);
  87.                 this.instance.shouYi(payMenoy);
  88.                 payMenoy*=2;
  89.                
  90.         }

  91.         @Override
  92.         public void shouYi(double payMenoy) {
  93.                 this.setMenoy(this.getMenoy()+payMenoy);
  94.                 Tools.sop("富翁收到程序员"+Tools.format(SHIWANMENOY));
  95.         }
  96.        
  97. }

  98. ///////////////////////DEMO///////////////////////////////////
  99. public class GeveMeMenoy{
  100.         public static void main(String[] args) {
  101.                 init();
  102.         }
  103.         static void init(){
  104.                 Cxy cxy=new Cxy();
  105.                 Fw fw=new Fw();
  106.                
  107.                 cxy.setInstance(fw);
  108.                 fw.setInstance(cxy);
  109.                
  110.                 //给程序员和富翁每人一千万启动资金
  111.                 cxy.setMenoy(PerSon.SHIWANMENOY*100);
  112.                 fw.setMenoy(PerSon.SHIWANMENOY*100);
  113.                
  114.                 Tools.sop("程序员和富翁每人本金一千万。");
  115.                
  116.                 for(int day=0;day<30;day++){
  117.                         cxy.payMenoy();
  118.                         fw.payMenoy();
  119.                        
  120.                 }
  121.                
  122.                
  123.                 Tools.sop(cxy.str);
  124.                 Tools.sop("双方资金总共为:"+Tools.format(cxy.getMenoy()+fw.getMenoy()));
  125.                 Tools.sop("除去成本双方资金分别为:\r\n程序员的资金即利润为:"+Tools.format((cxy.getMenoy()-PerSon.SHIWANMENOY*100)));
  126.                 Tools.sop("富翁的资金即利润为:"+Tools.format(fw.getMenoy()-PerSon.SHIWANMENOY*100));
  127.         }
  128. }

  129. //////////////////////////工具类///////////////////////////////////////////
  130. class Tools{
  131.         //打印
  132.         public static void sop(Object obj){
  133.                 System.out.println(obj);
  134.         }
  135.        
  136.         //资金转换成大写
  137.         public static StringBuilder format(double d){
  138.                 String tmp="";
  139.                 if(d<0){
  140.                         tmp=" 负的 ";
  141.                         d=-d;
  142.                 }
  143.                 long menoy=(long)d;
  144.                 StringBuilder str=new StringBuilder();
  145.                 return str.append(tmp).append(format(menoy,true)).append(format(getXiaoShu(d),false));
  146.         }
  147.        
  148.         /**
  149.          * @param menoy  要转换的人民币
  150.          * @param isZhengShu   true为整数 false为小数
  151.          * @return
  152.          */
  153.         private static StringBuilder format(long menoy,Boolean isZhengShu){
  154.                 char[] arrs={'零','壹','贰','叁','肆','伍','陆','柒','捌','玖'};
  155.                 char[] dw={'分','角','元','拾','佰','仟','万','拾','佰','仟','亿','拾','佰','仟','万'};
  156.                 StringBuilder menoyStr=new StringBuilder();
  157.                 for(int i=0,temp,index=isZhengShu?2:0;menoy!=0;i++,menoy/=10){
  158.                         temp=(int)(menoy%10);
  159.                         if(temp==0){
  160.                                 if(isZhengShu){
  161.                                         switch(i){
  162.                                                 case 0:
  163.                                                 case 4:
  164.                                                         //如果资金上亿 万哪里是0的话不加万
  165.                                                         if(menoy/10000>0){
  166.                                                                 break;
  167.                                                         }
  168.                                                 case 8:
  169.                                                         menoyStr.insert(0, dw[i+index]);
  170.                                                         break;
  171.                                         }
  172.                                 }
  173.                                 continue;
  174.                         }
  175.                         menoyStr.insert(0, arrs[temp]).insert(1,(dw[i+index]));
  176.                        
  177.                 }
  178.                
  179.                 return menoyStr;
  180.         }
  181.         //返回小数部分2位
  182.         public static int getXiaoShu(double d){
  183.                 int x=(int)((d*100)%100);
  184.                 return x;
  185.                
  186.         }
  187. }
复制代码
回复 使用道具 举报
我写的,你参考下!!!我把主函数分开,这样你看起方便些!!!


回复 使用道具 举报
通过一个简单计算
int startPoint=1;
                int sum=0;
                for(int i=1;i<=30;i++){
                        sum+=startPoint;
                        startPoint<<=1;
                        System.out.println("第"+i+"天总共索取"+sum+"分");
                }
可得
第30天总共索取1073741823分,即大于一千万,远大于30*10万=300万。
回复 使用道具 举报
本帖最后由 赵嘉男 于 2012-4-25 01:34 编辑

见过一次,我想想
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马