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) + "人");
}
}
未完待續。。。。