僅供參考(PS: 400+ 閱讀 0 評論也太真實了
吧😂)
第1題:排列組合
問題描述
將LANQIAO中的字母重新排列,可以得到不同的單詞,如LANQIAO、AAILNOQ等,注意這7個字母都要被用上,單詞不一定有具體的英文意義。
請問,總共能排列如多少個不同的單詞。
解題思路
計算策略:正難則反,結果 = 全排列 - 重復統計的單詞數。
-
先求出7個單詞的全排列
\(S=A_7^7=7×6×5×4×3×2×1=5040\) -
5個不重復單詞全排列
\(A=A_5^5=5×4×3×2×1=120\) -
5個不重復單詞有6個間隔
\(□ I □ L □N □ O □ Q □\) -
情況1:“AA”綁一起放在6個間隔中
\(B=C_6^1=6\) -
情況2:“AA”分開放在6個間隔中
\(C=C_6^2=\displaystyle\frac{6×5}{2×1}=15\) -
計算一下得到答案
\(R=S-A×(B+C)=5040-2520=2520\)
錯誤分析
一開始想7個單詞全排列,\(A_7^7=5040\),填上就萬事大吉了吧。
定睛一看🤔它有兩個AA,那么例如“AAILNOQ”的情況在全排列的情況下會統計兩次,不符題意
第2題:小學計算
問題描述
在計算機存儲中,12.5MB是多少字節?
解題思路
\(12.5MB=12.5×1024×1024B=13,107,200B\)
相關資料
電腦中存儲常用的單位:
1B(Byte 字節) = 8Bit
1KB (Kilobyte 千字節) = 1024Byte,
1MB (Megabyte,兆字節,簡稱“兆”) = 1024KB,
1GB (Gigabyte,吉字節,又稱“千兆”) = 1024MB,
1TB (Terabyte,太字節,或百萬兆字節) = 1024GB,其中1024=2^10 (2的10次方)。
錯誤分析
可能把字節看成千字節,或者混淆了字節和千字節。
第3題:括號序列
問題描述
由1對括號,可以組成一種合法括號序列:()。
由2對括號,可以組成兩種合法括號序列:()()、(())。
由4對括號組成的合法括號序列一共有多少種?
解題思路
- 暴力法:直接在紙張上寫出😁
Case 1:(((())))
Case 2:((()()))
Case 3:((())())
Case 4:((()))()
Case 5:(()(()))
Case 6:(()()())
Case 7:(()())()
Case 8:(())(())
Case 9:(())()()
Case10:()((()))
Case11:()(()())
Case12:()(())()
Case13:()()(())
Case14:()()()()
- 算法求解,我不會😂
可參考:括號生成 - 力扣
參考代碼
#include <stdio.h>
#include <string.h>
#include <malloc.h>
#define MAX_SIZE 1430
void generate(int left, int right, int n, char *str, int index, char **result, int *returnSize) {
if (left == n && right == n) { //左右括號都用完
result[(*returnSize)] = (char*)calloc((2 * n + 1), sizeof(char));
strcpy(result[(*returnSize)++], str);
return;
}
if (left < n) { //當左括號沒用完時
str[index] = '(';
generate(left + 1, right, n, str, index + 1, result, returnSize);
}
if (left > right && right < n) { //右括號數量必須小於左括號,否則一定不合法,且右括號沒有用完
str[index] = ')';
generate(left, right + 1, n, str, index + 1, result, returnSize);
}
}
char **generateParenthesis(int n, int *returnSize) {
char *str = (char*)calloc((2 * n + 1), sizeof(char));
char **result = (char **)malloc(sizeof(char *) * MAX_SIZE);
*returnSize = 0;
generate(0, 0, n, str, 0, result, returnSize);
return result;
}
int main() {
int i,count,//統計不同組合的個數
num=4;//括號的數量
char** result=generateParenthesis(num,&count);//獲取不同組合的字符串數組
for(i=0;i<count;i++) printf("Case%2d:%s\n",i+1,result[i]);
printf("Total:%d\n",count);
return 0;
}
///作者:dingjinyang
///鏈接:https://leetcode-cn.com/problems/generate-parentheses/solution/cyu-yan-hui-su-suan-fa-dai-ma-jian-ji-by-dingjinya/
///來源:力扣(LeetCode)
///著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。
錯題分析
我只寫出這7鍾
\(()()()(),(())()(),()(())(),()()(()),((()))(),()((())),()((())),(((()))),\)
第4題:節點求邊
問題描述
一個包含有2019個結點的無向連通圖,最少包含多少條邊?
解題思路
一個有n個頂點的無向連通圖最多有n(n-1)/2條邊,最少有n-1條邊(參考)。
答案即2018。
錯題分析
圖論還沒學,做錯寫成2019了😭