生活中常玩的游戏:
N个人玩游戏,说数字!,规定的数字为num,当要说到num数字或num倍数的人被淘汰,后面的人接着继续,直到剩下最后一个人为止,最后一个人获得胜利!
例如:有五个人玩游戏,五个人分别为 A,B,C,D,E.
String [ ] name={" A","B","C","D","E"};
当规定的num为3时, num=3;
A--1;B--2;C--3(被淘汰);D--4;E--5; ------->还剩下 ABDE 4人————》接着继续
A--6;B--7;D--8;E--9(被淘汰)---------->还剩下 ABD 3人-------》接着继续 A--10;B--11;D--12(被淘汰)---------》还剩下AB2人------》接着继续
A--13;B--14;A----15(被淘汰)-----------》最后剩下B------->最后B获得了胜利!!!想了好久,我当初的判断条件很简单 while(true){
int count=5;//数组长度
i++;
if(i%num==0){
count--;
countinue;
}else{
System.out.print(i+" ");
}
if(count==1){
break;
}
}
但是这只能输出 人喊的数,却不能得到最终结果: 我所想要的是循环判断和输出,其中还要输出谁依次被淘汰,最后谁获得了胜利!!
求大家给点好的思路,如果能有代码,更好··搞了一下午,我自己都晕了··
N个人玩游戏,说数字!,规定的数字为num,当要说到num数字或num倍数的人被淘汰,后面的人接着继续,直到剩下最后一个人为止,最后一个人获得胜利!
例如:有五个人玩游戏,五个人分别为 A,B,C,D,E.
String [ ] name={" A","B","C","D","E"};
当规定的num为3时, num=3;
A--1;B--2;C--3(被淘汰);D--4;E--5; ------->还剩下 ABDE 4人————》接着继续
A--6;B--7;D--8;E--9(被淘汰)---------->还剩下 ABD 3人-------》接着继续 A--10;B--11;D--12(被淘汰)---------》还剩下AB2人------》接着继续
A--13;B--14;A----15(被淘汰)-----------》最后剩下B------->最后B获得了胜利!!!想了好久,我当初的判断条件很简单 while(true){
int count=5;//数组长度
i++;
if(i%num==0){
count--;
countinue;
}else{
System.out.print(i+" ");
}
if(count==1){
break;
}
}
但是这只能输出 人喊的数,却不能得到最终结果: 我所想要的是循环判断和输出,其中还要输出谁依次被淘汰,最后谁获得了胜利!!
求大家给点好的思路,如果能有代码,更好··搞了一下午,我自己都晕了··
public static void main(String[] args) {
StringBuffer s=new StringBuffer();
s.append("A");
s.append("B");
s.append("C");
s.append("D");
s.append("E");
int num=11;
int length=s.length();
int i=0;
while(length!=1){
if((i+1)%num==0){
System.out.println(i+1);
System.out.println(s.charAt(i%s.length())+"被淘汰");
s.deleteCharAt(i%s.length());
length--;
}
i++;
}
System.out.println(s+"获胜");
}
public static void main(String[] args) {
StringBuffer s=new StringBuffer();
s.append("A");
s.append("B");
s.append("C");
s.append("D");
s.append("E");
Scanner sc=new Scanner(System.in);
System.out.print("请输入一个整数:");
int num=sc.nextInt();
int length=s.length();
int i=0;
while(length!=1){
if((i+1)%num==0){
System.out.println(i+1);
System.out.println(s.charAt(i%s.length())+"被淘汰");
s.deleteCharAt(i%s.length());
length--;
}
i++;
}
System.out.println(s+"获胜");
}
控制台输入的
开始的时候将每个人的值都设为0,当某人喊到3的倍数的时候就将其置为1
最后输出是0的那个数就可以了。
代码如下
public void getLast() { int[] arr = new int[100];
// 用来判断淘汰的人数
int count = 0;
// 计数用,一直增加
int temp = 0;
while (count < 99) { for (int i = 0; i < arr.length; i++) {
// 如果没有淘汰
if (arr[i] == 0) {
// 接着喊数
temp++;
// 如果是3的倍数
if (temp % 3 == 0) {
// 淘汰掉
arr[i] = 1;
// 淘汰人数加1
count++;
}
}
}
}
// 找出剩下的那个人,输出
for (int j = 0; j < arr.length; j++) {
if (arr[j]==0) {
System.out.println("剩下的是第" + (j + 1) + "个");
}
} }
s.append("A");
s.append("B");
s.append("C");
s.append("D");
s.append("E");
int num=11;
int length=s.length();
int i=0;
while(length!=1){
if((i+1)%num==0){
System.out.println(i+1);
System.out.println(s.charAt(i%s.length())+"被淘汰");
s.deleteCharAt(i%s.length());
length--;
}
i++;
}
System.out.println(s+"获胜");
2
B被淘汰
4
E被淘汰
6
D被淘汰
8
C被淘汰
A赢:
实际的结果是c赢
int n = 3;
ArrayList<String> arr = new ArrayList<String>();
arr.add("a");
arr.add("b");
arr.add("c");
arr.add("d");
arr.add("e");
for (int i = 0, j = 0; arr.size() > 0;) {
if (j < n - 1) {
j++;
if (i < arr.size() - 1) {
i++;
} else if (i == arr.size() - 1) {
i = 0;
}
} else if (j == n - 1) {
j = 0;
System.out.println(arr.get(i));
arr.remove(i);
if (i < arr.size() - 1) { } else if (i == arr.size()) {
i = 0;
}
} else { }
}
public static void main(String[] args) {
// TODO Auto-generated method stub
List<String> list = new ArrayList<String>();
list.add("A");list.add("B");list.add("C");list.add("D");list.add("E"); int num = 3; while(list.size()>=num){
for(int i=0 ; i<list.size() ;i++)
{
if((i+1)%num==0){
list.remove(i);
}
}
}
for(String str : list){
System.out.println("胜利者:"+str);
}
}
a(6)bde(9)剩 bd 喊道9
b(10、12)d(11) 最后获胜者应该是d吧,难道我又理解错了?
谢谢大家的帮助··这是我自己写的 因为我想用动态数组,却用不了··所有就用这种方式写的 ,就是太麻烦了··
import java.util.Scanner;
public class kk { /**
* @param args
*/
public static void main(String[] args) {
Scanner input= new Scanner(System.in);
String [] name={"A","B","C","D","E"};
System.out.println("请输入一个数:");
int num= input.nextInt();
int j=0;
int count=name.length;
while(count!=1){
for(int i=0;i<name.length;i++){
j++;
if(!(name[i].equals("1"))){
if(j%num==0&&count>1){
System.out.println(name[i]+"喊:"+j+"被淘汰了!!");
name[i]="1";
count--;
}else{
System.out.println(name[i]+"喊:"+j);
}
}else{
j--;
}
}
}
for(int i=0;i<name.length;i++){
if(!(name[i].equals("1"))){
System.out.println(name[i]+"获得了胜利!!");
}
}
}}
下面是我的代码,我只考虑3的倍数(其实尾数含3我也写出来了,请参见注释),请参考
package NumberGame;public class Person {
private String name;
private int index;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getIndex() {
return index;
}
public void setIndex(int index) {
this.index = index;
}}package NumberGame;import java.util.ArrayList;
import java.util.List;public class NumberGameDriver { /**
* @param args
*/
private List personList = new ArrayList();
private static int maxIndex;
private int divisor = 3;
private NumberGameDriver() {
int a = 64;
for (int i = 1; i <= 5 ; i++) {
Person p = new Person();
p.setName(String.valueOf((char) (a + i)));
p.setIndex(i);
personList.add(p);
}
}
public List getList(){
return personList;
}
public int getMaxIndex()
{
return ((Person)personList.get(personList.size()-1)).getIndex();
}
public void removeElement(){
for(int i = 0;i < personList.size();i++){
int index = ((Person)personList.get(i)).getIndex();
String indexStr = String.valueOf(index);
if(index%divisor == 0 || indexStr.substring(indexStr.length()-1, indexStr.length()).equals(String.valueOf(divisor))){
personList.remove(i);
}//如果你要考虑尾数含有3的话,需要将这个if拆分 }
}
public void setIndex(){
for(int i = 0;i<personList.size();i++){
((Person)personList.get(i)).setIndex(maxIndex+i+1);
}
} public static void main(String[] args) {
// TODO Auto-generated method stub
NumberGameDriver gd = new NumberGameDriver(); for (;;) {
maxIndex = gd.getMaxIndex();
gd.removeElement();
if (gd.getList().size() == 1) {
break;
}
gd.setIndex(); // for(int i = 0 ;i<gd.getList().size();i++){
// System.out.println(((Person)gd.getList().get(i)).getName()+" "+((Person)gd.getList().get(i)).getIndex());
// } } System.out.println("result:" + ((Person) gd.getList().get(0)).getName()
+ " " + ((Person) gd.getList().get(0)).getIndex());
}}
StringBuffer sbuf = new StringBuffer();
sbuf.append("ABCDE");
int count = 1;
int pos = 0;
int num = 3;
while (sbuf.length() > 1)
{
if (count % num == 0
|| String.valueOf(count).indexOf("" + num) > -1)
{
System.out.println(sbuf.charAt(pos) + "喊" + count + " 被淘汰!");
sbuf.deleteCharAt(pos);
pos = pos % sbuf.length();
}
else
{
System.out.println(sbuf.charAt(pos) + "喊" + count);
pos = (pos + 1) % sbuf.length();
}
count++;
}
System.out.println(sbuf + " 获得胜利!");