樓主是培訓出來的,初次來到深圳。結果投真實簡歷。接到的電話少的可憐,不到8個。面試的公司還都是培訓公司,來來回回
的坐地鐵之類的還挺累,接到面試通知很高興,飯都不吃直接先去面試。多的話不說了。。。。。都是淚。不清楚到底該不該
造假,上家面試公司也挺遠,在一個小房間裏,我去的時候連面試都不想去了,跟傳銷一樣。 結果問我是不是培訓機構的,我沒
說話,然後交流了一番,說這個看老闆 畢竟他做不了主。看了我的博客覺得我還是能夠上手的。時間越長,自己的壓力也越大。畢竟深圳這個城市只適合去打拼,而不是給你時間去沉澱。好久沒寫博客了,來自阿里巴巴的一位大哥github。
問題一:
小易準備去魔法王國採購魔法神器,購買魔法神器需要使用魔法幣,但是小易現在一枚魔法都沒有,但是小易有兩臺魔法機器
可以通過投入x(x可以爲0)個魔法幣產生更多的魔法幣。
魔法機器1:如果投入x個魔法幣,魔法機器會將其變爲2x+1個魔法幣
魔法機器2:如果投入x個魔法幣,魔法機器會將其變爲2x+2個魔法幣
小易採購魔法神器總共需要n個魔法幣,所以小易只能通過兩臺魔法機器產生恰好n個魔法幣,小易需要你幫他設計一個投入
方案使他最後恰好擁有n個魔法幣。
輸入描述:輸入包括一行,包括一個正整數n(1<=n<=10^9),表示小易需要的魔法幣數量。
輸出描述:輸出一個字符串,每個字符表示該次小易選取投入的魔法機器。其中只包含字符'1'和'2'。
輸入例子1:10
輸出例子1:122
分析:明確魔法機器1只能產生奇數,魔法機器2只能產生偶數。
package org.java.Test;
import java.util.Scanner;
/**
* @author Lee
* @date:2018.11.6 12.30
* 功能:獲得特定數量硬幣問題
* */
public class CoinNumber {
//解題關鍵:明確魔法機器1只能產生奇數,魔法機器2只能產生偶數即可
public static void main(String[] args) {
System.out.println("請輸入要獲得的硬幣數量:");
Scanner scanner=new Scanner(System.in);
int coincount=scanner.nextInt();
StringBuilder sb=new StringBuilder();
while(coincount>=1){
//偶數情況
if(coincount%2==0){
coincount=(coincount-2)/2;
sb.append("2");
//奇數情況
}else{
coincount=(coincount-1)/2;
sb.append("1");
}
}
//輸出反轉後的字符串
System.out.println(sb.reverse());
}
}
帶輸入異常處理判斷的版本
package org.java.Test;
import java.util.Scanner;
/**
* @author Lee
* @date:2018.11.6 12.44
* 功能:獲得特定數量硬幣問題
* */
public class CoinNumber {
//解題關鍵:明確魔法機器1只能產生奇數,魔法機器2只能產生偶數即可
public static void main(String[] args) {
System.out.println("請輸入要獲得的硬幣數量:");
Scanner scanner=new Scanner(System.in);
boolean flag=true;
while(flag){
try {
int coincount=scanner.nextInt();
StringBuilder sb=new StringBuilder();
while(coincount>=1){
//偶數情況
if(coincount%2==0){
coincount=(coincount-2)/2;
sb.append("2");
//奇數情況
}else{
coincount=(coincount-1)/2;
sb.append("1");
}
}
//輸出反轉後的字符串
System.out.println(sb.reverse());
flag=false; //程序結束
} catch (Exception e) {
System.out.println("輸入數據類型不匹配,請您重新輸入:");
scanner.nextLine();
continue;
}
}
}
}
問題二:求 "相反數"問題
爲了得到一個數的"相反數",我們將這個數的數字順序顛倒,然後再加上原先的數得到"相反數"。例如,爲了得到1325的
“相反數”,首先我們將該數的數字順序顛倒,我們得到5231,之後再加上原先的數,我們得到5231+1325=6556。如果顛倒
之後的數字有前綴零,前綴零將會被忽略。例如n=100,顛倒之後是1.
輸入描述:輸入包括一個整數n(1<=n<=10^5)
輸出描述:輸出一個整數,表示n的相反數
輸入例子:1325
輸出例子:6556
分析:利用reverse()方法反轉字符串然後再將字符串轉換成int類型的整數。
1).String轉Int
String str="123";
int a=Integer.parseInt(str);
或
String str="123";
int a=Integer.valueof(str).intValue();
2).next()和nextLine()的區別
在Java中輸入字符串有兩種方法,就是next()和nextLine().兩者的區別就是:nextLine()的輸入是碰到回車就終止輸入,而next()方法是碰到空格,回車,Tab鍵都會被視爲終止符。所以next()不會得到帶空格的字符串,而nextLine()可以得到帶空格的字符串。
package org.java.Test;
import java.util.Scanner;
/**
* @author Lee
* @date: 2018.11.6 12.57
* 功能:求"相反數"問題
* */
public class OppositeNumber {
/**
* 解題關鍵:String轉Int;next()與nextLine()的區別
* */
public static void main(String[] args) {
System.out.println("請輸入一個整數:");
Scanner scanner=new Scanner(System.in);
String s=scanner.next();
//將字符串轉換成數字
int number1=Integer.parseInt(s);
//將字符串倒序後轉換成數字
//因爲Integer.parseInt()的參數類型必須是字符串所以必須加上toString()
int number2=Integer.parseInt(new StringBuffer(s).reverse().toString());
System.out.println(number1+number2);
}
}
這時候我們有可以看看StringBuffer與StringBuilder的區別:
StringBuffer:
public synchronized StringBuffer append(Object obj) {
super.append(String.valueOf(obj));
return this;
}
public synchronized StringBuffer append(String str) {
super.append(str);
return this;
}
StringBuilder:
public StringBuilder append(char[] str, int offset, int len) {
super.append(str, offset, len);
return this;
}
public StringBuilder append(boolean b) {
super.append(b);
return this;
}