两个算法:
其一:
public void BaoshuTest(int[] person, int k)
{
int len = person.length;
int s =0;
int c = 1;
int[] flag = new int[len];
for (int j = 0; j< len ;j++ )
{
flag[j] = 0;
}
int i =0;
int count = 0;
do
{
if ( flag[i] != k )
{
flag[i] = c;
c++;
if (c > k)
{
c = 1;
count++;
}
}
if (i == len-1)
{
i = 0;
}
else
i++;
for (int j = 0 ; j<person.length ; j++ )
{
System.out.print(flag[j] + " ");
}
System.out.println("/n");
s++;
}
while (count < len-1);
int pos = 0;
for (int j=0 ; j<len ; j++ )
{
if (flag[j] != k){ pos = j;break;}
}
System.out.println(s);
System.out.println("position is "+ (pos+1));
}
其二:
public int BaoshuTest(int[] person, int k)
{
int len = person.length;
int s =0;
if (person.length > 2)
{
if (len >= k)
{
int[] newPerson = new int[len - len/k];
for (int i = (len/k)*k; i< len; i++ )
{
newPerson[i-(len/k)*k] = person[i];
s++;
}
int j = len - (len/k)*k ;
for (int i = 0; i< (len/k)*k-1 ;i++ )
{
s++;
if ((i+1) % k != 0 )
{
newPerson[j] = person[i];
j++;
}
}
System.out.println("进入子程序 person.length >= k");
for (int i =0;i<len-len/k ;i++ )
{
System.out.print(newPerson[i]+" ");
}
System.out.println("/n");
// System.out.println("/n" + (len-len/k) + " " + k);
return s+BaoshuTest(newPerson, k);
}
else
{
int[] newPerson = new int[len-1];
for (int i = k-(k/len)*len; i< len ; i++ )
{ s++;
if (i-(k-(k/len)*len) < len-1)
{
newPerson[i-(k-(k/len)*len)] = person[i];
}
}
int j = len -(k-(k/len)*len);
for (int i =0 ;i< k-(k/len)*len-1;i++ )
{s++;
if ((i+1) %k !=0)
{
newPerson[j] = person[i];
j++;
}
}
System.out.println("进入子程序 person.length <k ");
for (int i =0;i<len-1 ;i++ )
{
System.out.print(newPerson[i]+" ");
}
System.out.println("/n");
// System.out.println("/n"+ (len-1) + " " + k);
return s + BaoshuTest(newPerson,k);
}
}
else
if (k %2 ==0)
{
System.out.println("最后的位置是:" + person[0]);
}
else
System.out.println("最后的位置是:" + person[1]);
return s;
}
其一:
public void BaoshuTest(int[] person, int k)
{
int len = person.length;
int s =0;
int c = 1;
int[] flag = new int[len];
for (int j = 0; j< len ;j++ )
{
flag[j] = 0;
}
int i =0;
int count = 0;
do
{
if ( flag[i] != k )
{
flag[i] = c;
c++;
if (c > k)
{
c = 1;
count++;
}
}
if (i == len-1)
{
i = 0;
}
else
i++;
for (int j = 0 ; j<person.length ; j++ )
{
System.out.print(flag[j] + " ");
}
System.out.println("/n");
s++;
}
while (count < len-1);
int pos = 0;
for (int j=0 ; j<len ; j++ )
{
if (flag[j] != k){ pos = j;break;}
}
System.out.println(s);
System.out.println("position is "+ (pos+1));
}
其二:
public int BaoshuTest(int[] person, int k)
{
int len = person.length;
int s =0;
if (person.length > 2)
{
if (len >= k)
{
int[] newPerson = new int[len - len/k];
for (int i = (len/k)*k; i< len; i++ )
{
newPerson[i-(len/k)*k] = person[i];
s++;
}
int j = len - (len/k)*k ;
for (int i = 0; i< (len/k)*k-1 ;i++ )
{
s++;
if ((i+1) % k != 0 )
{
newPerson[j] = person[i];
j++;
}
}
System.out.println("进入子程序 person.length >= k");
for (int i =0;i<len-len/k ;i++ )
{
System.out.print(newPerson[i]+" ");
}
System.out.println("/n");
// System.out.println("/n" + (len-len/k) + " " + k);
return s+BaoshuTest(newPerson, k);
}
else
{
int[] newPerson = new int[len-1];
for (int i = k-(k/len)*len; i< len ; i++ )
{ s++;
if (i-(k-(k/len)*len) < len-1)
{
newPerson[i-(k-(k/len)*len)] = person[i];
}
}
int j = len -(k-(k/len)*len);
for (int i =0 ;i< k-(k/len)*len-1;i++ )
{s++;
if ((i+1) %k !=0)
{
newPerson[j] = person[i];
j++;
}
}
System.out.println("进入子程序 person.length <k ");
for (int i =0;i<len-1 ;i++ )
{
System.out.print(newPerson[i]+" ");
}
System.out.println("/n");
// System.out.println("/n"+ (len-1) + " " + k);
return s + BaoshuTest(newPerson,k);
}
}
else
if (k %2 ==0)
{
System.out.println("最后的位置是:" + person[0]);
}
else
System.out.println("最后的位置是:" + person[1]);
return s;
}