DataInputStream in=new DataInputStream(System.in);
x=in.readDouble();
System.out.println(x);
输入数字后为什么输出的是一大串数字?从键盘怎么读入数字?  
JTextField tx=new JTextField(10);
String a=tx.getText()
如果输入的是数字,怎么把String转换成int类型用于计算?50分求一算法
有n个不同的球,m个盒子,每个盒子至少要有k个球,求放法.需要判断n,m,k的关系.
最好给个完整代码.谢谢

解决方案 »

  1.   

    这看起来真像作业贴喵~~``1.DataInputStream是FileInputStream的子类,是字节流...直接输出的当然也是字节
    2.new Integer(a)
    3.判断关系?看得不太明白.---------------------
    1.lz需要学习使用jdk文档
    2.同1,并且lz需要加强基础知识的掌握.
    3.数据结构与算法? 抱歉这个我也很菜喵~~~``
      

  2.   

    Integer.parseInt(String )
    或者有个valueofint();
      

  3.   

    谢谢大家的指教.算法题后面那句可以去掉
    有n个不同的球,m个盒子,每个盒子至少要有k个球,这个就行.
    问题,1,2已解决.再次谢谢
      

  4.   

    a=(int)System.in.read();
    System.in.read()这条语句默认读出的数据是char的,然后就转换成int数据,所以你的(int)转型不用都可以,写成:a=System.in.read(); 结果还是一样的。
    因为默认接收到的是char型的,然后才转换成int型,所以你应该要知道char和int的对应关系
    char '0' 对应 int 48 
    char '1' 对应 int 49
    ……如此类推
    char '9' 对应 int 57char 'a' 对应 int 97
    char 'b' 对应 int 98
    …………
    你自己查查资料。你还要了解的是System.in.read();每次只读取一个char。就是说如果你输入102,你第一次使用System.in.read();读到的char 1 ,然后转换成int 就是49 ,如果你再使用System.in.read();读取,就会读到 char 0,结果转换成int 就是 48,再使用System.in.read();读取就是 char 2 ,转换成 int 50。如果你输入a,就会得到int 97。因此,你无论输入什么数字,因为都是只读了第一个数字,所以都会比58小。但是如果你输入a,就会比60打,因为其实得到的是int 97。
      

  5.   

    Integer.parseInt(String)  
       记得  输入啊
      

  6.   

    个人判断有如下情况:
    k*m = n 刚好全放满
    k*m < n 需要再次将剩余的球放(n - k*m)次直到n个球全部放完为止
    为了验证完整性,添加每个盒子里放不满k个小球的情况,当作异常抛出即可...
      

  7.   

    对于第三个问题,我想了下,说下我的看法吧,没仔细研究,如果错了,请不要介意,参考下就好了
    分情况讨论
    第一:若n<1或者m<1或者k<1
         数据不合法,不讨论
    第二:若n>1并且m>1并且k>1 有下面情况
          1:  若 n<m*k    球的总数量不够,不能达到要求
          2:  若 n>=m*k   有下面的情况
                 若n-m*k<=m   方法有n-m*k种(这里只考虑组合,不考虑顺序,即对m个盒子的顺序无要求)
                   若n-m*k>m    请把他看做上面操作一个多个n-m*k=m 和一个n-m*k<m的组合 
                       令a=(n-m*k)%m  b=[(n-m*k)-a]/m  可以肯定b>=1
                        若b=1  有 m*a 种组合 2个相关步骤组合相乘
                           若b=2  有 m*m*a种组合 3个相关步骤组合相乘
                           .
                        .
                        对于任意b有 m^b*a种组合
                           即当n-m*k>m时有m^[(n-m*k)-(n-m*k)%m]/m*[(n-m*k)%m]总感觉还是不对,哎,数学都忘记了          
      

  8.   

    50分求一算法 
    有n个不同的球,m个盒子,每个盒子至少要有k个球,求放法.需要判断n,m,k的关系. 
    最好给个完整代码.谢谢
    ================================================================
    "需要判断n,m,k的关系."
    不太理解什么意思 是分前判断n>m*k n=m*k n<m*k吗  还是分完了 来判断每种方法的n,m,k的具体关系
    如果是前一种 
    n<m*k 不满足条件“每个盒子至少要有k个球”
    n=m*k 那每个盒子K个球 只有一种放法
    n>m*k 无非就是把n-m*k个球放到n个盒子里有多少种方法
    n-m*k个球最少放在一个盒子里 最多放在n-m*k个盒子里
    共有方法
    ……
    这里还一个问题 你说的"有n个不同的球,m个盒子," 我想知道到底是球不同 还是盒子不同 或者2者都不同 这个差别大了
      

  9.   

    鉴于情况比较复杂 善待脑细胞 保存实力明天继续学习 所以我放弃50分的诱惑 找些别人的的结论来吧
    ==============================================================================================
    k个相同的球放到n个不同的盒子里,盒子可以为空,也可以放入多个球,共有多少种放法? 
          这题只要转化一下就可以变成熟悉的模型了。实际上就是要把k个球分成n组,我们可以用n-1个隔板来搞这个事(隔板...大大有用的东西)。我们把n-1个隔板和k个球放到一排搞排列,共有(k+n-1)!种方法,慢!隔板和球都是无区别的东东,所以我们还要除以k!和(n-1)!(即可重排列),这样就是(k+n-1)!/(k!*(n-1)!),变一下就是    C(k+n-1,k) or C(k+n-1,n-1)。搞定了,其实这就是可重组合,从n个元素中选出k个元素,元素可允许重复选(那么k是可以大于n的),方案数就是C(k+n-1,k) 。比如1,2,3,4四个数里面选3个数(可重复),就有1 1 1,1 1 2 ,1 1 3,1 1 4,1 2 2....反正就是C(4+3-1,3)=20种方案咯。那个盒子与球实际上就是:n个盒子就相当于n个元素,某个盒子里的球数就相当于这个元素被选了几次,就是这样。还有像什么方程x1+x2+x3+x4=10共有多少组非负整数解,其实就是4个元素选10个的可重组合。 
    ==============================================================================================
    那么如果是n个不同的球放到m个相同的盒子里的方案数呢(不允许有盒子为空)? 
          这就是组合数学中比较有名的第二类Stirling数了,我们用S(n,m)来表示方案数。这样就会有一些神奇的东东了: 
          S(n,0)=0,       S(n,1)=1,     S(n,2)=2(n-1)  -1  [2的(n-1)次方减1],   S(n,n-1)=C(n,2),   S(n,n)=1. 
                                               第三个:  我们把第一个球随便放在一个盒子里,后面的n-1个球都有两种放法,和第一个球同盒或不同盒,但最后要减去所有球都在一个盒子里的情况。 
          第四个:  肯定有且只有一个盒子里有两个球,方案数即选出这两个球的方案数。 
          其他的都是显而易见的吧 
          Last but not least:  最重要的递推:  第二类stirling数满足这样一个递推关系式 
                                 S(n,m)=m*S(n-1,m)+S(n-1,m-1)  {n>1,m>1}       我们考虑前n-1个球已放好,现在放第n个球,即最后一个球。 
          情况1:     放最后一个球时已无空盒,前n-1个球放到m个盒中共S(n-1,m)种方法,而最后一个球有 
                        m个盒子可选,根据乘法原理,方案数为m*S(n-1,m) 
          情况2:   最后一个球单独占一个盒,因为随便占哪个盒都一样(盒子无区别),所以就是前n-1个   
                        球放到m-1个盒子里,最后一个丢到空的那个,方案数为S(n-1,m-1) 
          加法原理一加就搞定了。 
          编程的时候就是用的这样一个递推,递推是OI中常用的算法,比如编程计算组合数时都不是一个个去算,而是用这个公式:C(n,m)=C(n-1,m-1)+C(n-1,m),这样效率就高得多了。 
          vijos上有道这样的题:求n个不同的球放到m个不同的盒子里(不允许有空盒)方案数。 
          仔细想想,不就是第二类Stirling数再去把盒子全排列一下么? 
          设它为D(n,m) 
          有   D(n,m)=m!*S(n,m)=m*m!*S(n-1,m)+m*(m-1)!*S(n-1,m-1)=m*(D(n-1,m)+D(n-1,m-1))       这样就得出了D(n,m)的递推式,可以去交那道题了。   
          这一类球与盒子的问题,可以根据球有无区别,盒子有无区别,是否允许有空盒,搞出8种情况,上面 
    只介绍了3种,其他的大家有兴趣可以自己推推,比较好玩。 
    ==============================================================================================
    问题:n个球放到t个盒子里;n个球     t个盒子     是否允许有空盒子          方案数
    球不同    盒子不同    允许                      t^n
    球不同    盒子不同    不允许                    t!*(第二类Stirling数)
    球不同    盒子相同    允许                      从i=1到t的t个(第二类Stirling数)相加
    球不同    盒子相同    不允许                    (第二类Stirling数)
    球相同    盒子不同    允许                      C(n+t-1,n)
    球相同    盒子不同    不允许                    C(n-1,t-1)
    球相同    盒子相同    允许                      (需用生成函数,略)
    球相同    盒子相同    不允许                    (需用生成函数,略)
      

  10.   

    如果不考虑球不同颜色 那不是只剩下考虑n-m*k个球放到m个盒子的情况了吗
    只要求将n-m*k个球放到m个盒子的情况就行了