static int[] Jose(int total, int start, int alter)
        {
            int j, k = 0;
            int[] intCounts=new int[total+1];
            int[] intPers=new int[total+1];            for(int i=0;i<total;i++)
            {
                intPers[i]=i;            }            for(int i=total;i>=2;i--)
            {
                start=(start+alter-1)%i;
                if(start==0)
                    start=i;
                intCounts[k]=intPers[start];
                k++;                for(j=start+1;j<=i;j++)
                    intPers[j-1]=intPers[j];
            }
            intCounts[k]=intPers[1];
            return intCounts;
        }

解决方案 »

  1.   

    static int[] Jose(int total, int start, int alter)
      {
      int j, k = 0;
      int[] intCounts=new int[total+1];
      int[] intPers=new int[total+1];  for(int i=0;i<total;i++)
      {
      intPers[i]=i;  }  for(int i=total;i>=2;i--)
      {
      start=(start+alter-1)%i;
      if(start==0)
      start=i;
      intCounts[k]=intPers[start];
      k++;  for(j=start+1;j<=i;j++)
      intPers[j-1]=intPers[j];
      }
      intCounts[k]=intPers[1];
      return intCounts;
      }
      

  2.   

      约瑟夫环问题,即设有n个人坐成一个圈,从某个人开始报数,数到m的人出列,接着从出列的下一个人开始重新报数,数到m的人再出列,如此循环,直到所有人都出列为止。最后按出列顺序输出。代码如下:  //从第start人开始计数,以alter为单位循环记数出列,总人数为total  publicint[]Jose(inttotal,intstart,intalter)  {  intj,k=0;  //count数组存储按出列顺序的数据,以当结果返回  int[]count=newint[total+1];  //s数组存储初始数据  int[]s=newint[total+1];  //对数组s赋初值,第一个人序号为0,第二人为1,依此下去  for(inti=0;i<total;i++)  {  s[i]=i;  }  //按出列次序依次存于数组count中  for(inti=total;i>=2;i--)  {  start=(start+alter-1)%i;  if(start==0)  start=i;  count[k]=s[start];  k++;  for(j=start+1;j<=i;j++)  s[j-1]=s[j];  }  count[k]=s[1];  //结果返回  returncount;  }