1. Object数组中元素自动分类
/*
* Object[]数组中元素自动分类,将如下objs数组中各个元素按其本身的类型存储到具体类型的数组中
* Object objs[] = { 45, "king", 56.45, "rose", 45.4f, true, 'A', false,"Jack", 56, 0.0, 0.012f, 'B', true, 'C' };
*/
public class FenLei {
public static void main(String[] args) {
Object objs[] = { 45, "king", 56.45, "rose", 45.4f, true, 'A', false,"Jack", 56, 0.0, 0.012f, 'B', true, 'C' };
String[] sa = new String[3];
int[] ia = new int[2];
boolean[] ba = new boolean[3];
char[] ca = new char[3];
float[] fa = new float[2];
double[] da = new double[2];
int s=0,i=0,b=0,c=0,f=0,d=0;
for(Object obj:objs){
switch(obj.getClass().getName()){
case "java.lang.Integer":
ia[i++]=(int)obj;
break;
case "java.lang.String":
sa[s++]=(String)obj;
break;
case "java.lang.Boolean":
ba[b++]=(boolean)obj;
break;
case "java.lang.Double":
da[d++]=(double)obj;
break;
case "java.lang.Float":
fa[f++]=(float)obj;
break;
case "java.lang.Character":
ca[c++]=(char)obj;
break;
}
}
print(ca);
}
public static void print(char[] ls){
for(int i=0;i<ls.length;i++){
if(i==ls.length-1)
System.out.println(ls[i]);
else
System.out.print(ls[i]+",");
}
}
}
2. 1000!的结果末尾有多少个零?
/*
* 需求:求1000!的结果末尾有多少个零?
* 思路:1. 1000!的计算结果可能超出了long的范围,不能直接运算此阶乘再数末尾的零
* 2. 2*5就会使末尾多一个零,因为1-1000之间,偶数足够多,也就是因数2足够多,所以结尾0的个数是由1-1000中因子5的个数决定
* 3. 1-1000中一个数如果能被5整除,就至少含有一个因数5,如果除数还能被5整除(即被25整除),则至少含有2个因数5,能在末尾贡献2个0,依次类推。。。
*/
class CountZero{
public static void main(String[] args){
System.out.println(countZero(10));
}
public static int countZero(int n)
{
int result = 0;
int temp = 5;
while (0 < temp && temp <= n)
{
result += n / temp;
temp *= 5;
}
return result;
}
}
3. 猴子分桃问题
/*
*题目: 海滩上有一堆桃子,五只猴子来分。第一只猴子把这堆桃子凭据分为五份,多了一个,这只猴子把多的一个扔入海中,拿走了一份。
* 第二只猴子把剩下的桃子又平均分成五份,又多了一个,它同样把多的一个扔入海中,拿走了一份,第三、第四、第五只猴子都是这样做的,
* 问海滩上原来最少有多少个桃子?
*/
public class Ftao {
public static void main(String[] args) {
//从第五只猴子分堆开始,往上递归
//每堆的桃子数
int averNum=1;
//分堆之前的总数
int sum=1;
int i=0;
boolean flag=false;
while(!flag){
flag=true;
//从最后一次分堆前的桃子数开始,依次递推前面第四、三、二、一次分堆前的桃子数,如果递推中每次分堆都能得到整数,就是符合条件的
for(int j=0;j<4;j++){
if(sum%4==0){
averNum=sum/4;
sum=averNum*5+1;
}
else{
flag=false;
//每次分堆前桃子总数都是上一次分堆中的其中4份之和,且再拿走一个桃子可以再分成5份,满足这个条件是必须是16、26、36、...这样的数
sum=(++i)*10+5+1;
break;
}
}
}
System.out.println("海滩上原来最少有 "+sum+"个桃子!");
}
}
4. 有100个人围成一个圈,从1开始报数,报到14的这个人就要退出。然后其他人重新开始,从1报数,到14退出。问:最后剩下的是100人中的第几个人?
import java.util.LinkedList;
import java.util.List;
public class Test4 {
public static void main(String[] args) {
game(100, 14);
}
public static void game(int person, int num) {
List<Integer> list = new LinkedList<Integer>();
for (int i = 1; i <= person; i++) {
list.add(i);
}
int pos = 0;
while (list.size() > 1) {
//每次记录当前位置,数到num个后,删除该位置上的元素
pos = (pos + num - 1) % list.size();
list.remove(pos);
}
System.out.println(person + "人玩数" + num +
",最后剩下的是第" + list.get(0) + "人");
}
}
未完待续。。。。