假设游戏者共有十人,且有10个不同的姓:张、王、李、赵、刘、于、许、金、钱、孙,魔术师将十个姓写在四张纸牌上,游戏者只需指出那几张纸上有自己的姓,魔术师就能准确的说出游戏者的姓,如图所示。
请编程实现:
- 分组输出姓氏,让用户选择姓氏所在的组。
- 给出你猜的姓氏。
代码如下
package shiyan5;
import java.util.Scanner;
public class GuessGame {
public static void main(String[] args) {
int quotient;//商数
int remainder=-1;//余数
int position;//数组索引
char[] firstNames={' ','李','王','张','刘','陈','杨','赵','黄','周','吴'};//通过二进制数据的规律将十个姓氏放在不同组里
String[] groups=new String[]{"","","","",""};
for (int i = 1; i <firstNames.length ; i++) {
quotient=i;
position=groups.length-1;
while(quotient!=0)
{
remainder=quotient%2;
quotient=quotient/2;
if(remainder==1)
{
groups[position]+=firstNames[i];
}
position--;
}//输出给组姓氏
}
for (int i =1;i<groups.length;i++) {
System.out.println(i+":"+groups[i]);
}
System.out.println("请输入您所想的姓氏所在位置:(以-1表示结束):");
char[] c=new char[]{'0','0','0','0'};//用于存放用户输入的组别
int i=9999999;
Scanner sc = new Scanner(System.in);//获取用户输入,为-1时终止循环,非-1时将c数组赋值为字符型的"'1'"
while (true){
i=sc.nextInt();
if(i==-1)
{
break;
}
c[i-1]='1';
}
System.out.println(c);//输出二进制数
int answer=0;
for (i=0;i<c.length;i++)
{
answer+=(c[i]-'0')*Math.pow(2,4-i-1);
}
System.out.println("请问您的姓氏为:");//输出姓氏
System.out.println(firstNames[answer]);
}
}