用数组实现约瑟夫出圈问题,n个人排成一圈,从第一个开始报数,报到m的人出圈,
剩下的人继续开始从1报数,直到所有的人都出圈为止。对于给定的n,m,
求出所有的人出圈顺序。

class OutOfCircle {
     
public OutOfCircle(int nn, int mm) {
          n 
= nn;
          m 
= mm;
          man 
= new int[n];                    //使用man数组表示N个人,man[i]为1表示i还在圈中,为0则表示i已经不在圈中
          count = new int[n];                  //保存出圈顺序
          java.util.Arrays.fill(man, 1);     //初始化man,一开始所有人都在圈中,所以都为1
     }


     
public int[] out() {
          
int c = 0;                      //当前人报的数
          int j = 0;
          
while (total(man) != 0{      //当圈中没人时,man中元素之和为0
               for (int i = 0; i < n; i++{
                   c 
= c + man[i];                     //报数,出去的人为0,相当于没报
                    if (c != 0 && c % m == 0{        //表示当前c!=0一定要加上,因为0对任何数取余都为0
                         man[i] = 0;                             //出圈,置为0
                         count[j++= i + 1;                //保存出圈人的编号
                         c = 0;                                //重新开始报数  
                    }

               }

          }

          
return count;
     }


     
private int total(int[] t) {  //求INT数组的和
          //int sum = 0;
          
for (int i : t) {
               //sum 
+= i;
                    if(t[i]!=0) return 1;
              }
             return 0;
          //
return sum;
     }


     
private int n;    
     
private int m;   
     
private int[] man;
     
private int[] count; 
}

posted @ 2008-11-19 17:34 Bom Wu 阅读(2197) | 评论 (7)编辑 收藏
 
如果用JTextArea来做信息窗口,不断用append()显示新信息,通常会希望内容能自动滚动,保持最后增加的信息能够显示出来。利用setCaretPosition()可以实现,这个方法是设置输入光标的位置,如果光标位置超出目前可视范围,会自动滚动以保正光标可以显示出来。

int length = textArea.getText().length();
textArea.setCaretPosition(length);

posted @ 2008-11-19 14:40 Bom Wu 阅读(3228) | 评论 (0)编辑 收藏
仅列出标题
共2页: 上一页 1 2