筆試題 汽水瓶/明明的隨機(jī)數(shù)/進(jìn)制轉(zhuǎn)換

[編程題] 汽水瓶

有這樣一道智力題:“某商店規(guī)定:三個(gè)空汽水瓶可以換一瓶汽水。小張手上有十個(gè)空汽水瓶痹栖,她最多可以換多少瓶汽水喝曹货?”答案是5瓶,方法如下:先用9個(gè)空瓶子換3瓶汽水淳梦,喝掉3瓶滿的,喝完以后4個(gè)空瓶子昔字,用3個(gè)再換一瓶爆袍,喝掉這瓶滿的,這時(shí)候剩2個(gè)空瓶子作郭。然后你讓老板先借給你一瓶汽水陨囊,喝掉這瓶滿的,喝完以后用3個(gè)空瓶子換一瓶滿的還給老板夹攒。如果小張手上有n個(gè)空汽水瓶蜘醋,最多可以換多少瓶汽水喝?

輸入描述:
輸入文件最多包含10組測試數(shù)據(jù)咏尝,每個(gè)數(shù)據(jù)占一行压语,僅包含一個(gè)正整數(shù)n(1<=n<=100)啸罢,表示小張手上的空汽水瓶數(shù)。n=0表示輸入結(jié)束胎食,你的程序不應(yīng)當(dāng)處理這一行扰才。

輸出描述:
對于每組測試數(shù)據(jù),輸出一行厕怜,表示最多可以喝的汽水瓶數(shù)衩匣。如果一瓶也喝不到,輸出0粥航。

輸入例子:
3
10
81
0

輸出例子:
1
5
40
我的思路是一次性算出所有空瓶琅捏,然后加到一起,最后再統(tǒng)一除以3
注意每一次除以3后得到的數(shù)再次計(jì)算時(shí)應(yīng)該加上余數(shù)

import java.util.Scanner;

public class test1015 {
    public static void main(String[] args){
        Scanner sc=new Scanner(System.in);
        int n;
        while(sc.hasNext()){
            n=sc.nextInt();
            if(n==0)break;
            int sum=n;
            while(n/3!=0){
                sum+=n/3;
                int m=n%3;
                n=n/3+m;
            }
            if(n==2)
                sum++;
            System.out.println(sum/3);
        }
    }
    
}

如果發(fā)現(xiàn)了這個(gè)問題本質(zhì)遞歸 就更方便
*遞歸問題3個(gè)瓶子換1瓶水+1個(gè)空瓶子躁锡,兩個(gè)瓶子換1瓶水+0個(gè)空瓶子午绳,1個(gè)瓶子換0瓶水置侍。
f(1) = 0
f(2) = 1
f(3) = 1
f(4) = f(2)+1 //4個(gè)瓶子映之,其中3個(gè)可以換1瓶水+1個(gè)空瓶,所以是f(2)+1
f(5) = f(3)+1 //3個(gè)瓶子換1瓶水+1個(gè)空瓶蜡坊,所以是f(3)+1
...
f(n) = f(n-2)+1 *

import java.util.Scanner;
public class Main {
    public static int f(int n){
        if(n==1)return 0;
        if(n==2)return 1;
        return f(n-2)+1;
    }
    public static void main(String[] args){
        Scanner sc=new Scanner(System.in);
        while(sc.hasNext()){
            int n=sc.nextInt();
            if(n==0)break;
            System.out.println(f(n));
        }
    }
}

[編程題] 明明的隨機(jī)數(shù)

明明想在學(xué)校中請一些同學(xué)一起做一項(xiàng)問卷調(diào)查杠输,為了實(shí)驗(yàn)的客觀性,他先用計(jì)算機(jī)生成了N個(gè)1到1000之間的隨機(jī)整數(shù)(N≤1000)秕衙,對于其中重復(fù)的數(shù)字蠢甲,只保留一個(gè),把其余相同的數(shù)去掉据忘,不同的數(shù)對應(yīng)著不同的學(xué)生的學(xué)號(hào)鹦牛。然后再把這些數(shù)從小到大排序,按照排好的順序去找同學(xué)做調(diào)查勇吊。請你協(xié)助明明完成“去重”與“排序”的工作曼追。

Input Param
n 輸入隨機(jī)數(shù)的個(gè)數(shù)
inputArray n個(gè)隨機(jī)整數(shù)組成的數(shù)組

Return Value
OutputArray 輸出處理后的隨機(jī)整數(shù)

注:測試用例保證輸入?yún)?shù)的正確性,答題者無需驗(yàn)證汉规。測試用例不止一組礼殊。

輸入描述:
輸入多行,先輸入隨機(jī)整數(shù)的個(gè)數(shù)针史,再輸入相應(yīng)個(gè)數(shù)的整數(shù)

輸出描述:
返回多行晶伦,處理后的結(jié)果

輸入例子:
11
10
20
40
32
67
40
20
89
300
400
15

輸出例子:
10
15
20
32
40
67
89
300
400

解析:利用TreeSet非常方便的解決該問題。(寫本題的時(shí)候沒注意到測試用例不止一個(gè)啄枕,結(jié)果一直不對婚陪,吐血了發(fā)現(xiàn)是這個(gè)原因。以后一定要認(rèn)真讀題频祝,不能被迷惑了)

Set的功能方法

Set 的用法:
存放的是對象的引用近忙,沒有重復(fù)對象
Set set=new HashSet();
String s1=new String("hello");
String s2=s1;
String s3=new String("world");
set.add(s1);
set.add(s2);
set.add(s3);
System.out.println(set.size());//打印集合中對象的數(shù)目 為 2竭业。
Set 的 add()方法是如何判斷對象是否已經(jīng)存放在集合中?
boolean isExists=false;
Iterator iterator=set.iterator();
while(it.hasNext()) {
String oldStr=it.next();
if(newStr.equals(oldStr)){
isExists=true;
}
}
Set具有與Collection完全一樣的接口及舍,因此沒有任何額外的功能未辆,不像前面有兩個(gè)不同的List。實(shí)際上Set就是Collection,只是行為不同锯玛。(這是繼承與多態(tài)思想的典型應(yīng)用:表現(xiàn)不同的行為咐柜。)Set不保存重復(fù)的元素。
Set : 存入Set的每個(gè)元素都必須是唯一的攘残,因?yàn)镾et不保存重復(fù)元素拙友。加入Set的元素必須定義equals()方法以確保對象的唯一性。Set與Collection有完全一樣的接口歼郭。Set接口不保證維護(hù)元素的次序遗契。
HashSet : 為快速查找設(shè)計(jì)的Set。存入HashSet的對象必須定義hashCode()病曾。
TreeSet : 保存次序的Set, 底層為樹結(jié)構(gòu)牍蜂。使用它可以從Set中提取有序的序列。
LinkedHashSet : 具有HashSet的查詢速度泰涂,且內(nèi)部使用鏈表維護(hù)元素的順序(插入的次序)鲫竞。于是在使用迭代器遍歷Set時(shí),結(jié)果會(huì)按元素插入的次序顯示逼蒙。

import java.util.Scanner;
import java.util.TreeSet;
 
public class Main
{
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        while(sc.hasNext()){
             
            TreeSet<Integer> set=new TreeSet<Integer>();
            int n=sc.nextInt();
            if(n>0){
                for(int i=0;i<n;i++){
                    set.add(sc.nextInt());
                }
            }
            for(Integer i:set){
                System.out.println(i);
            }
        }
    }
}

[編程題] 進(jìn)制轉(zhuǎn)換

寫出一個(gè)程序从绘,接受一個(gè)十六進(jìn)制的數(shù)值字符串,輸出該數(shù)值的十進(jìn)制字符串是牢。(多組同時(shí)輸入 )

輸入描述:
輸入一個(gè)十六進(jìn)制的數(shù)值字符串僵井。

輸出描述:
輸出該數(shù)值的十進(jìn)制字符串。

輸入例子:
0xA

輸出例子:
10

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        while(sc.hasNext()){
            String s=sc.nextLine();
            int sum=0;
            int j=0;
            for(int i=s.length()-1;i>=2;i--){
                
                int m=(int) Math.pow(16, j);
                char c=s.charAt(i);
                switch(c){
                case 'A':
                    sum+=10*m;
                    break;
                case 'B':
                    sum+=11*m;
                    break;
                case 'C':
                    sum+=12*m;
                    break;
                case 'D':
                    sum+=13*m;
                    break;
                case 'E':
                    sum+=14*m;
                    break;
                case 'F':
                    sum+=15*m;
                    break;
                default:
                    String xxx=c+"";
                    sum+=Integer.parseInt(xxx)*m;
                }
                j++;
            }
            System.out.println(sum);
        }
    }
}

后來發(fā)現(xiàn)jdk自帶進(jìn)制轉(zhuǎn)換方法 - - 受教了 很方便

public class Main {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        while (sc.hasNext()){
            String str=sc.next().substring(2);
            System.out.println(Integer.parseInt(str,16));
        }
    }
} v

1驳棱、十進(jìn)制轉(zhuǎn)化為N進(jìn)制

Integer.toBinaryString(int i)//返回的是i的二進(jìn)制表示批什,返回類型為String

Integer.toString(int i,int radix)//返回的是i的二進(jìn)制表示,返回類型為String蹈胡,但是負(fù)數(shù)不適用渊季。

Integer.toHexString(int i)//返回16進(jìn)制

Integer.toOctalString(int i)//返回8進(jìn)制

System.out.println(Integer.toBinaryString(5));//101

System.out.println(Integer.toBinaryString(-5));//-5的二進(jìn)制的補(bǔ)碼形式

System.out.println(Integer.toString(5,2)//101

System.out.println(Integer.toString(-5,2)//結(jié)果不對,負(fù)數(shù)不能用此函數(shù)

2罚渐、N進(jìn)制轉(zhuǎn)化為十進(jìn)制

Integer.parseInt(String s,int radix)//radix進(jìn)制的s却汉,轉(zhuǎn)化為十進(jìn)制,返回類型為int

Integer.valueOf(String s,int radix)//同上

看到了別人寫的方法 也比我的簡單 貼上來學(xué)習(xí)
1.通過stringbuffer構(gòu)造字符串 用reverse方法 使得計(jì)數(shù)可以從0開始
2.使用substring明顯更方面
3.大A的ascii碼65 小a97 '0'的為48 要記住 使用更快捷
//其實(shí)不記住也行 通過Integer.valueOf('A')輸出可以查看
吸取教訓(xùn) 希望下次代碼可以更簡潔荷并。合砂。

 public static void main(String[] args) {
            Scanner sc=new Scanner(System.in);
            while (sc.hasNext()){
                StringBuffer sb=new StringBuffer();
                sb.append(sc.next());
                String str=sb.reverse().substring(0,sb.length()-2);
                char ch[]=str.toCharArray();
                int sum=0;
                for(int i=0;i<ch.length;i++){
                    if(ch[i]>='A'&&ch[i]<='F'){
                        sum+=(Integer.valueOf(ch[i])-55)*Math.pow(16,i);
                    }else {
                        sum+=(Integer.valueOf(ch[i])-48)*Math.pow(16,i);
                    }
                }
                System.out.println(sum);
            }
        }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市源织,隨后出現(xiàn)的幾起案子翩伪,更是在濱河造成了極大的恐慌微猖,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,561評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件缘屹,死亡現(xiàn)場離奇詭異凛剥,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)轻姿,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,218評論 3 385
  • 文/潘曉璐 我一進(jìn)店門犁珠,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人互亮,你說我怎么就攤上這事犁享。” “怎么了豹休?”我有些...
    開封第一講書人閱讀 157,162評論 0 348
  • 文/不壞的土叔 我叫張陵炊昆,是天一觀的道長。 經(jīng)常有香客問我威根,道長凤巨,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,470評論 1 283
  • 正文 為了忘掉前任医窿,我火速辦了婚禮磅甩,結(jié)果婚禮上炊林,老公的妹妹穿的比我還像新娘姥卢。我一直安慰自己,他們只是感情好渣聚,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,550評論 6 385
  • 文/花漫 我一把揭開白布独榴。 她就那樣靜靜地躺著,像睡著了一般奕枝。 火紅的嫁衣襯著肌膚如雪棺榔。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,806評論 1 290
  • 那天隘道,我揣著相機(jī)與錄音症歇,去河邊找鬼。 笑死谭梗,一個(gè)胖子當(dāng)著我的面吹牛忘晤,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播激捏,決...
    沈念sama閱讀 38,951評論 3 407
  • 文/蒼蘭香墨 我猛地睜開眼设塔,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了远舅?” 一聲冷哼從身側(cè)響起闰蛔,我...
    開封第一講書人閱讀 37,712評論 0 266
  • 序言:老撾萬榮一對情侶失蹤痕钢,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后序六,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體任连,經(jīng)...
    沈念sama閱讀 44,166評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,510評論 2 327
  • 正文 我和宋清朗相戀三年例诀,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了课梳。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,643評論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡余佃,死狀恐怖暮刃,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情爆土,我是刑警寧澤椭懊,帶...
    沈念sama閱讀 34,306評論 4 330
  • 正文 年R本政府宣布,位于F島的核電站步势,受9級(jí)特大地震影響氧猬,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜坏瘩,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,930評論 3 313
  • 文/蒙蒙 一盅抚、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧倔矾,春花似錦妄均、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,745評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至壤巷,卻和暖如春邑彪,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背胧华。 一陣腳步聲響...
    開封第一講書人閱讀 31,983評論 1 266
  • 我被黑心中介騙來泰國打工寄症, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人矩动。 一個(gè)月前我還...
    沈念sama閱讀 46,351評論 2 360
  • 正文 我出身青樓有巧,卻偏偏與公主長得像,于是被迫代替她去往敵國和親铅忿。 傳聞我的和親對象是個(gè)殘疾皇子剪决,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,509評論 2 348

推薦閱讀更多精彩內(nèi)容