习题:
求猴子大王:
15个猴子围成一圈选大王,依次1-7循环报数,报到7的猴子被淘汰,直到最后一只猴子称为大王,问:哪只猴子会成为大王?/
解题思路:
将15个猴子存入数组,全部设置为活着
开始遍历猴子数组,当存活猴子数量为1的时候,剩下的那个就是猴子王
如果他是活的,就继续报数
当猴子报数到7的时候,就直接设置为死
如果是死的就直接下一个开始报数
public class Test{
public static void main(String[] args){
boolean [] monkey = new boolean[15];
for (int i = 0; i < monkey.length; i++) {
monkey[i] = true;
}
//存活的猴子数量,当为1的时候找到猴子王
int liveMonkey = monkey.length;
//报数的变量,每遍历一个猴子,count就自加1,如果等于7了,重新把1赋值给他
int count = 1;
//猴子数组的下标,根据标实现遍历猴子
int index = 0;
while(liveMonkey > 1){
if(monkey[index]){
if(count == 7){
monkey[index] = false;
count = 1;
liveMonkey--;
}else {
count++;
}
index++;
if(index == 15)
index = 0;
}else{
index++;
if(index == 15)
index = 0;
}
}
//System.out.println("456465");
for(int i = 0 ; i < monkey.length ; i++){
if(monkey[i])
System.out.println("第"+(i+1)+"只猴子是猴子王!");
//System.out.println(monkey[i]);
}
}
}
加密算法
数字资产的概念被提出来,用于给数字资产加密的业务变得非常火热,现有一套用于给数字资产加密的系统专门用于产生加密密码,请设计一个方法用于给数字密码进行加密。
加密规则如下:根据数字长度的每位数,给每位数+5,再对10求余,最后将所有数字反转,得到的新数,如果是奇数请加上1997,否则就是这个新数。
public class Test {
public static void main(String[] args) {
while(true){
Scanner in = new Scanner(System.in);
if (in.hasNextInt()){
int number = in.nextInt();
System.out.println("加密后的数是:"+jiami(number));
}else {
System.out.println("输入错误,退出加密程序");
}
}
}
/**
* 数字反转
* @param number 反转前的数字
* @return 反转后数字
*/
public static int fanzhuan(int number){
//计算sum的位数
int number1 = number;
int count1 = 1;
int sum = 0;
while(number1>0){
count1 *= 10 ;
number1 = number1/10;
}
count1 /= 10;
System.out.println(count1);
//数字反转
while (number >0){
int a = number % 10;
sum += a*count1;
count1 = count1/10;
number /=10;
}
System.out.println("数字反转后:"+sum);
return sum;
}
//加密方法
public static int jiami(int number){
//int count = 0; //计算位数
int sum = 0;
int flage = 1;
while(number>0){
int a = number%10;
sum += (a+5)%10*flage;
number = number/10;
//count++;
flage *= 10;
}
System.out.println("乘5对十取余后:"+sum);
int number1 = fanzhuan(sum);
if(number1 % 2 !=0){
number1 +=number1+1997;
}
return number1;
}
}