华为校园招聘上机试题Java实现(二)

题目1:回文数字猜想

给出一个数字N,如68,定义它的逆数为86,那么经过68+86=154,154+451=605,605+506=1111这样几次操作后,可以得到回文数字1111。现在需要判断经过7次操作是否可以得到回文,如果能,输出回文,如果不能输出0。
思路:拆分各个位数并逆序相加,对和数判断回文。
(数字与逆序相加,如果对应位置相加不产生进位,那么结果肯定是回文;产生进位的有可能是回文,如605+506)

[java]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. package tongji.edu.main;  
  2.   
  3. import java.util.Scanner;  
  4.   
  5. public class MainHuiwen {  
  6.   
  7.     public static void main(String[] args) {  
  8.         @SuppressWarnings("resource")  
  9.         int n = new Scanner(System.in).nextInt(); //获取输入数字  
  10.         int hui = huiWen(n);  
  11.         System.out.println(hui);  
  12.   
  13.     }  
  14.   
  15.     /** 
  16.      * 七次操作后判断是否是回文 
  17.      */  
  18.     private static int huiWen(int n) {  
  19.         for (int i = 0; i < 7; i++)  
  20.             n = n + reverseNum(n);  
  21.         if (n == reverseNum(n))  
  22.             return n;  
  23.         else  
  24.             return 0;  
  25.   
  26.     }  
  27.   
  28.     /** 
  29.      * 对数字进行反转 
  30.      */  
  31.     private static int reverseNum(int n) {  
  32.         return Integer.valueOf(new StringBuffer(String.valueOf(n)).reverse().toString()).intValue();  
  33.     }  
  34.   
  35. }  

题目2:找出大串中指定子串个数并删除

找出大串中指定子串个数,并删除,返回最终的字符串和所包含子串的数量

[java]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. package study.edu.main;  
  2.   
  3. public class MainDeleteSubString{  
  4.   
  5.     public static void main(String[] args) {  
  6.         String str = "123abc12de234fg1hi34j123k";  
  7.         String subStr = "1";  
  8.         String[] strArray = str.split(subStr);  
  9.         String StrDelsub="";  
  10.         int count=0;  
  11.         for(String temp:strArray){  
  12.             StrDelsub+=temp;  
  13.             if(!temp.equals(""))  //split分割字符串,如果分隔符在首部,分割后的字符串会出现一个空字符串  
  14.                 count++;  
  15.         }  
  16.         System.out.println("The number of sub str is :" + count);  
  17.         System.out.println("The result string is: " + StrDelsub);  
  18.       
  19.     }  
  20.   
  21.           
  22. }  

找出字符串中指定子串个数的另一种方法:

[java]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. package study.edu.main;  
  2.   
  3. public class MainSubString {  
  4.   
  5.     public static void main(String[] args) {  
  6.         String str = "123abc12de234fg1hi34j123k";  
  7.         String subStr = "12";  
  8.         int n = deleteSub(str, subStr);   
  9.         System.out.println("The number of sub str is :" + n);  
  10.     }  
  11.   
  12.     /** 
  13.      * 利用String的indexOf()函数来判断长串中指定字串个数 
  14.      */  
  15.     private static int deleteSub(String str, String subStr) {  
  16.         int count = 0;  
  17.         String lstr = str.toString();  
  18.         int i = lstr.indexOf(subStr);  
  19.         int now = 0;  
  20.         while (i != -1 && i < str.length()) {  
  21.             now = lstr.indexOf(subStr, i);  
  22.             if (now != -1) {  
  23.                 count++;  
  24.                 i = now + subStr.length();  
  25.             } else {  
  26.                 i = now;  
  27.             }  
  28.         }  
  29.         return count;  
  30.     }  
  31.   
  32. }  

题目3:约瑟夫环问题

有n 个人围城一圈每次从1数起数到3就把那个人提出圈子,最后只保留一个人。
输入: 输入人数字符串
输出:把最后一个人所保留位置返回出来。
比如你输入11 的话即有11个人 [1,2,3,4,5,6,7,8,9,10,11] 。返回的是7.
如果输入"1a" 的话,返回的是"0"

[java]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. package study.edu.main;  
  2.   
  3. import java.util.LinkedList;  
  4. import java.util.List;  
  5. import java.util.Scanner;  
  6.   
  7. public class MainLink {  
  8.   
  9.     public static void main(String[] args) {  
  10.         @SuppressWarnings("resource")  
  11.         Scanner scanner = new Scanner(System.in);  
  12.         int n = 0;  
  13.         try {  
  14.             n = scanner.nextInt();  
  15.             if(n<1)  
  16.                 throw new Exception("wrong input");  
  17.             List<Integer> peopleLink = new LinkedList<Integer>();  
  18.             for (int i = 1; i <= n; i++) {  
  19.                 peopleLink.add(i);  
  20.             }  
  21.             int count = 0;  
  22.             while (peopleLink.size() > 1) {  
  23.                 for (int i = 0; i < peopleLink.size(); i++) {  
  24.                     count++;  
  25.                     if (count == 3) {  
  26.                         peopleLink.remove(i); // 出圈  
  27.                         count = 0;  
  28.                         i--; // 索引回退1步  
  29.                     }  
  30.                 }  
  31.             }  
  32.             System.out.println(peopleLink.get(0));  
  33.         } catch (Exception e) {  
  34.             System.out.println(0);  
  35.             return;  
  36.         }  
  37.   
  38.     }  
  39.   
  40. }  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值