2018招商银行暑期实习笔试-编程题
? ? ? ?分享一下前天做的招商銀行暑期實(shí)習(xí)筆試沒有做出的兩道編程題,這幾天狀態(tài)不對(duì),很簡(jiǎn)單的解決方法當(dāng)時(shí)就沒想到。
試題1:
? ? ? ?小明在一維坐標(biāo)系的非負(fù)軸上,坐標(biāo)x=n(n為非負(fù)整數(shù)),小明下一步只能跳到n-1、n+1或2n坐標(biāo)的點(diǎn)。假設(shè)小明初始位置為x=0,請(qǐng)求出到點(diǎn)x=n的最少跳躍次數(shù)。
解決思路:
? ? ? ?采用遞歸的方法,當(dāng)n為偶數(shù)時(shí),可以從n/2跳到n的位置;當(dāng)n為奇數(shù)時(shí),可以讓n加1或者減1,轉(zhuǎn)為偶數(shù),再到1/2的位置。
? ? ? ?當(dāng)n為奇數(shù)時(shí),問題在于選擇加1還是減1。存在一個(gè)特征在于,與奇數(shù)相鄰的兩個(gè)偶數(shù),一個(gè)可以整除2,一個(gè)可以整除4。為了使跳躍步數(shù)最少,因此,讓小明選擇到可以整除4的偶數(shù)。
當(dāng)n為偶數(shù)時(shí),f(n) = f(n/2)+1; 當(dāng)n為奇數(shù),n+1可以整除4時(shí),f(n) = f(n+1)+1; 當(dāng)n為奇數(shù),n-1可以整除4時(shí),f(n) = f(n-1)+1;具體程序如下所示:
import java.util.Scanner;public class ZhaoShang1 {public static void main(String[] args) {Scanner in = new Scanner(System.in);String str = in.nextLine();int x = Integer.parseInt(str.trim());System.out.println(f(x));}public static int f(int n) {if (n < 0) {return 0;}if (n == 0) {return 0;} else if (n == 1) {return 1;} else if (n == 2) {return 2;} else if (n == 3) {return 3;}if (n % 2 == 0) {return f(n / 2) + 1;} else if ((n + 1) % 4 == 0) {return f(n + 1) + 1;} else if ((n - 1) % 4 == 0) {return f(n - 1) + 1;}return 0;} }試題2:
? ? ? ?請(qǐng)求出第n個(gè)質(zhì)因數(shù)是2、3或5的正整數(shù),這里1滿足條件。前20個(gè)滿足條件的整數(shù)如下所示:
1, 2, 3, 4, 5, 6, 8, 9, 10, 12, 14, 15, 16, 18, 20, 21, 22, 24, 25,26解決思路:
? ? ? ?遍歷正整數(shù),添加標(biāo)記i,遇到符合條件的正整數(shù)時(shí),標(biāo)記i加1,比較標(biāo)記i與n是否相等,相等結(jié)束遍歷。
具體程序如下:
import java.util.Scanner;public class ZhaoShang2 {static int [] x = {1, 2, 3, 4, 5, 6, 8, 9, 10, 12, 14, 15, 16, 18, 20, 21, 22, 24, 25,26, 27,27,30};public static void main(String[] args) {Scanner in = new Scanner(System.in);String str = in.nextLine();int n = Integer.parseInt(str.trim());int z = 1;int num = 1;if(n == 1) {System.out.println(1);return;}for(int i = 2; ; i++) {if(i % 2 == 0 || i % 3 == 0 || i % 5 == 0) {num ++;}if(num == n) {System.out.println(i);break;}}} }總結(jié)
以上是生活随笔為你收集整理的2018招商银行暑期实习笔试-编程题的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 实现防抖功能
- 下一篇: 【题目】两个整数相除得到循环小数,求循环