import java.util.*;
class BaoShu00
{
public static void main(String[] args)
{
System.out.println("请输入n的值:");
Scanner s0 = new Scanner(System.in);
int n = s0.nextInt();
int shuzu[]=new int[n];
int i=0;
for(i=0;i<shuzu.length;i++){
shuzu[i]=i+1;
System.out.println(i);
}
i=0;
while(n>1){
for (int j=1;j<=3;j++){
int k=1;
if(j==1){
while(k!=0){
if(shuzu[i]<n){
k=0;
}
i++;
if(i==n){
i=0;
}
}
}
if(j==2){
while(k!=0){
if(shuzu[i]<n){
k=0;
}
i++;
if(i==n){
i=0;
}
}
}
if(j==3){
while(k!=0){
if(shuzu[i]<n){
shuzu[i]+=n;
k=0;
n--;
}
i++;
if(i==n){
i=0;
}
}
}
}
}
for (int i=0;i<n ;i++ ){
if(shuzu[i]<n){
int l=i+1;
System.out.println("第"+l+"位留下了");
}
}
}
}
class BaoShu00
{
public static void main(String[] args)
{
System.out.println("请输入n的值:");
Scanner s0 = new Scanner(System.in);
int n = s0.nextInt();
int shuzu[]=new int[n];
int i=0;
for(i=0;i<shuzu.length;i++){
shuzu[i]=i+1;
System.out.println(i);
}
i=0;
while(n>1){
for (int j=1;j<=3;j++){
int k=1;
if(j==1){
while(k!=0){
if(shuzu[i]<n){
k=0;
}
i++;
if(i==n){
i=0;
}
}
}
if(j==2){
while(k!=0){
if(shuzu[i]<n){
k=0;
}
i++;
if(i==n){
i=0;
}
}
}
if(j==3){
while(k!=0){
if(shuzu[i]<n){
shuzu[i]+=n;
k=0;
n--;
}
i++;
if(i==n){
i=0;
}
}
}
}
}
for (int i=0;i<n ;i++ ){
if(shuzu[i]<n){
int l=i+1;
System.out.println("第"+l+"位留下了");
}
}
}
}
当初我刚开始学java的时候也挨个的做了一遍。
错误你对比java50题的那个,应该能找出来你的错误。
位置应该在第40道左右
while(k!=0){
if(shuzu[i]<n){
shuzu[i]+=n;
k=0;
n--;
}
i++;
if(i==n){
i=0;
}
}
在这个里面循环挑不出来,因为你这个数组里面没有比n小的了,或者是跳出来了但是这个时候n=0所以你最后那个输出循环i初值是0他根本就不会执行了。
因为不知道你到底是有什么要求,而且你这代码我感觉真有点乱了,所以不太好帮你改了....
for (i=0;i<shuzu.length ;i++){
if(shuzu[i]<=shuzu.length){
System.out.println("最后留下的是原来的第"+shuzu[i]+"位");
}
}
可以考虑用队列来做import java.util.concurrent.LinkedBlockingQueue;/**
* 报3出局
*
*/
public class Test06 {
public static void main(String[] args) {
int number = getLastPeopleNumber(100);
System.out.println("最后一个人的编号为:" + number);
}
/**
*
* @param n 人数,编号范围为1-n
* @return 最后一个人的编号
*/
static int getLastPeopleNumber(int n) {
//初始化
LinkedBlockingQueue<Integer> peopleQueue = new LinkedBlockingQueue<>();
for(int i = 1;i <= n;++i) {
peopleQueue.add(i);
}
//报到3的出局,否则插入到队列末端,直到队列长度为1
int index = 1;
while(peopleQueue.size() > 1) {
if(index % 3 == 0) {
peopleQueue.remove();
index = 1;
}else {
peopleQueue.add(peopleQueue.remove());
++index;
}
}
return peopleQueue.remove();
}
}