"2個面試華爲光網測試的有關算法題",我寫的程序!!!

 第一題:
    數小孩的題。
    假設n個小孩圍成一圈,每次數第m個小孩,該小孩被踢出來,請問當只剩下一個人的時候是第幾個人。(比如m=3,第一次數到第3個,第二次從第4個開始往下數,轉圈數)寫一個方法來實現。

第二題:
    假設有個int型的數n,實現高低位的互換,比如12345,給換成52341,寫一個方法實現n的高低位的互換。(n是幾不知道)

public class Job {
 
 public Job(){}

 //把一個數翻過來表示
 private void job0(){
  int n = 123050;
  String out = "";
  
  while(n != 0){
   int r = reverse(n);
   n = (n -r)/10;
   out += r;
  }
  
  System.out.println(out);
 }
 
 private int reverse(int n){
  do{
   n = n%10;
  }while(n > 10);
  
  return n;
 }
 
 /*
  *假設n個小孩圍成一圈,每次數第m個小孩,該小孩被踢出來,
  *請問只剩下一個人的時候是第幾個人
  */
 private void job1(){
  int n = 7;
  int m = 4;
  int[] a = new int[n];
  for(int i = 0; i < a.length; i++){
   a[i] = i+1;
   System.out.print(a[i] + "  ");
  }
  System.out.print("/n");
  
  find(a,m);
 }
 
 private void find(int[] a,int m){
  int find = 0;
  int len = a.length;
  while(len > 1){
   if((find + m) > len)
    find = find + m - len - 1;
   else
    find = find + m - 1;
   
   System.out.println("踢出: " + a[find]);
   
   for(int i = find; i < len-1; i++)
    a[i] = a[i+1];
   
   len--;
   
   if(find == len) find = 0;
  }
  
  System.out.println("留下: " + a[0]);
 }
 
 public static void main(String[] args) {
  Job J = new Job();
  J.job0();
  J.job1();
 }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章