第三題找不到很好的解決方案。搜尋+剪枝但感覺複雜度太嚇人;dp狀態太多,記憶體會爆掉;數學方法 ---- 整數拆分,想不出怎麼拆;... 。等候大牛們指點迷津。
感覺這次的試題有一定難度,也很繁瑣。
1,實現void strtol(char* num_str,char** endptr,int base)函式,此函式的功能是將乙個字串num_str轉換成整數。num_str中儲存的是待轉換的字串。字串有8,10,16進製制三種形式,儲存在base引數中,若base為0,則需要自己判斷具體的進製。要判斷是否溢位,若為上溢位,返回int_max,若為下溢位,返回int_min。字串num_str可能存在非法字元,若存在非法字元,返回非法字元前面的轉換結果,並將endptr指向第乙個非法字元,若沒有非法字元,不需要返回endptr。
#注:不能使用任何庫函式。
思路:在 base == 0 時判斷進製,讀數時注意非法字元,就這兩點。
程式:#include
using namespace std;
/** 判斷進製
* 1. num_str中的字元都不大於 '7' 則返回 8 進製
* 2. num_str中的字元都不大於 '9' 則返回 10 進製
* 3. 返回 16 進製
*/int find_base(char *num_str)
else
}if (c <= '7') return 8;
else if (c <= '9') return 10;
return 16;
}bool check(char c, int base)
return false;
}int char_to_int(char c, int base)
int str_to_int(char *num_str, char **endptr, int base)
for (; *num_str != '/0'; ++num_str)
sum = sum * base + char_to_int(*num_str, base);
if ((sign == 1) && sum >= int_max)
return int_max;
else if (sign == -1 && sum >= -int_min)
}return (int)sum;
}int strtol(char *num_str, char **endptr, int base)
return str_to_int(num_str, endptr, base);
}int main()
2,從1億個數中,找出最大的1000個數。效率要盡可能的高,使用的額外空間要盡可能小。
void max_num(int* source_num,int* max_num)
source_num:陣列包括所有的1億個數。
max_num:儲存最大的1000個數。
#注:不能使用任何庫函式。
思路:維護乙個有1000個元素的最小堆即可。
比較下乙個元素與堆中的最小值,大於則heap_pop(), 再heap_push()。
最後堆中的1000個元素即為答案。
程式:#include
const int max_num = 5;
const int max_src = 10;
void swap(int &x, int &y)
void heap_fix_down(int root, int *max_num, int size)
}void heap_fix_up(int *max_num, int size)
else
break;}}
void heap_pop(int *max_num, int& size)
void heap_push(int val, int *max_num, int& size)
void max_1000num(int *source_num, int *max_num)
for (i = max_num; i < max_src; ++i)}}
int main()
;int max_num[max_num];
max_1000num(source_num, max_num);
return 0;
}3,若對於整數n,在集合中找出m個數,使其和等於剩下的n-m個數的和。返回所有可能的組合數。n<10000。
#注:不能使用任何庫函式。
四川大學線下程式設計挑戰 數字填充
題目詳情 peter喜歡玩數字遊戲,但數獨這樣的遊戲對他來說太簡單了,於是他準備玩乙個難的遊戲。遊戲規則是在乙個n n的 裡填數,規則 對於每個輸入的n,從左上角開始,總是以對角線為起點,先橫著填,再豎著填。這裡給了一些樣例,請在樣例中找到規律並把這個n n的 列印出來吧。輸入描述 多組測試資料 資...
2023年四川大學高等代數部分解答
六 解答下列各題 2.設 v 是複數域上的有限維線性空間,h 是 v 上兩兩可交換且可對角化的線性變換組成的線性空間.證明 存在若干線性函式 alpha h to mathbb 使得有如下的空間直和分解 v oplus v 其中,v h v,forall h in h 2.證明 先證明 h 中的任意...
四川大學線下程式設計比賽第三題 書本轉移
題目詳情 小強 有 3 個箱子 a,b,c 用來裝書,所有的書 一共n本 都按序號由小到大的順 序堆在 a上,現在他想把所有的書全都 放到 c 裡面去。每次他從 a 書架 拿 a 本書 不夠就全拿完 到 b,a 箱子翻轉,然後從 b 拿 b 本書 不夠就全 拿完 到 c,b 箱子翻轉。然後重複操作,...