记录一下自己刷题的错题
記錄一下自己刷題的錯題
1、小v所在的公司即將舉行年會,年會方案設計過程中必不可少的一項就是抽獎活動。小v在本次活動中被委以重任,負責抽獎活動的策劃;為了讓中獎的禮物更加精美且富有神秘感,打算采用禮品盒來包裝獎品,此時小v發揮了自己的創意想捉弄一下獲獎的同事,便采取了多重包裝來包裝獎品。
現給出一個字符串,并假定用一對圓括號( )表示一個禮品盒,0表示獎品,你能據此幫獲獎者算出最少要拆多少個禮品盒才能拿到獎品嗎?
輸入描述:
一行字符串,僅有'('、')'、'0' 組成,其中一對'(' ')'表示一個禮品盒,‘0’表示獎品;輸入的字符串一定是有效的,即'(' ')'一定是成對出現的。輸出描述:
輸出結果為一個數字,表示小v要拆的最少禮品盒數量輸入例子1:
(()(()((()(0)))))輸出例子1:
5解題思路:
在找到 "0" 之前,凡遇到成對的"()"表示一個完整的 空 盒子,可以丟掉,也可以拆開。如果選擇丟掉,那么output是最小的拆盒子數。 sum++ 是說選擇拆開一層包裝,sum-- 說明 試著拆開后發現 這是成對的"()" 空盒子,不如不拆,可以丟掉,不計入最小的拆盒子數中 private static int solution(String str) {int sum = 0;for(int i=0;i<str.length();i++){if(str.charAt(i)=='0'){break;}else if(str.charAt(i)=='('){sum++;//拆開一層包裝}else{sum--;//"()"情況的盒子可以不用拆開,直接丟掉即可}} return sum;}2、一個長方體,長寬高分別為x,y,z,都為自然數。
現在要把若干個相同的長方體擺成高為N的一根柱形體。
每層擺1個,如果兩種擺法的高度是一樣的,則認為這兩種擺法等價,所以每層只有三種擺法。
求一共有多少種擺法。
輸入描述:
第一行為一個數字N,N>=1且N<=100,表示要擺放的高度
第二行為長方體的長寬高,x、y、z都為無符號整數,按升序排列。
輸出描述:
擺法總數,已知該總數會小于10000000
輸入
10
5 6 7
輸出
1
3、一個長方體,長寬高分別為x,y,z,都為自然數。
現在要把若干個相同的長方體擺成高為N的一根柱形體。
每層擺1個,如果兩種擺法的高度是一樣的,則認為這兩種擺法等價,所以每層只有三種擺法。
求一共有多少種擺法。
輸入描述:
第一行為一個數字N,N>=1且N<=100,表示要擺放的高度
第二行為長方體的長寬高,x、y、z都為無符號整數,按升序排列。
輸出描述:
擺法總數,已知該總數會小于10000000
示例1
輸入
10
5 6 7
輸出
1
備注:
如果沒有任何一種擺法可以達成目的,輸出0
4、一個數字段由首尾兩個數字標識,表示一個自然數集合,
比如數字段[beg, end)表示從beg到end之間的所有自然數,
包含beg,但不包含end。
有若干個數字段,這些數字段之間可能有重疊,
怎么把這些數字段合并去重,用最少個數的數字段來表示。
合并前后,整個集合包含的數字不發生變化。
輸入描述:
第一行為數字N,表示接下來有N個數字段(N<=100000)
第二行開始一共有N行,每行兩個數字,分別表示一個數字段的beg和end
(beg和end為無符號32位整數)
輸出描述:
合并去重后形成的數字段集合,按升序排列。
示例1
輸入
4
3 8
3 7
4 6
7 9
輸出
3 9
5、有K種顏色的小球(K<=10),每種小球有若干個,總數小于100個。
現在有一個小盒子,能放N個小球(N<=8),現在要從這些小球里挑出N個小球,放滿盒子。
想知道有哪些挑選方式。注:每種顏色的小球之間沒有差別。
請按數字遞增順序輸出挑選小球的所有方式。
如有3種顏色,每種顏色小球的個數分別為a:1,b:2,c:3,挑出3個小球的挑法有:
003,012,021,102,111,120
輸入描述:
第一行兩個數字K N,分別表示小球種類數目和挑選的小球個數
第二行開始為每種小球的數目,共K行數據
輸出描述:
輸出所有可行的挑選方案,按升序排列
輸入例子1:
3 3
1
2
3
輸出例子1:
003
012
021
102
111
120
6、題目描述
有n個1~23的整數,寫一個算法,求出有多少個相互不同的子集合的和為24點。
輸入
輸入數據包含一組,每組占一行,包括n個整數 (1<=整數 <=23)
輸出
對于每個測試實例,要求輸出能組成24點的所有子集合的數量(子集合相互不同)。如果不存在,則輸出0。每個測試實例的輸出占一行。
輸入樣例
1 2 22 23
輸出樣例
2
import java.util.*;public class Main {public static int sum = 0;public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int length = scanner.nextInt();scanner.nextLine();int[] input = new int[length];boolean[] used = new boolean[input.length];for (int i = 0; i < length; i++) {input[i] = scanner.nextInt();}FullSort(input, used, 24, 0, length - 1);System.out.println(sum);}private static void FullSort(int[] input, boolean[] used, int sum1, int start, int end) {if (sum1 <= 0) return;if (start == end && sum1 != 0) return;for (int i = start; i <= end; i++) {if (i > 0 && input[i] == input[i - 1] && !used[i - 1]) continue;//去重if (!used[i]) {used[i] = true;if (sum1 == input[i]) sum++;else {FullSort(input, used, sum1 - input[i], i + 1, end);}used[i] = false;}}}}總結
以上是生活随笔為你收集整理的记录一下自己刷题的错题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何权衡CCD图像传感器的各类优缺点?
- 下一篇: H264 编码基本原理