-
个人简介
>>>旧版主页点此<<<
这里不是 C_A_zhi_L 的主页!
跟某831学的站内外联系方式
哔哩哔哩:点击此处
共创世界(ccw.site):点击此处
旧核桃OJ:点击此处
新核桃OJ:
洛谷:点击此处
常用代码
C++
高精度运算
高精加及添零
void spluszero(string *a, string *b) { int asize = (*a).length(), bsize = (*b).length(); if (bsize > asize) { for (int i = 1; i <= bsize - asize; i ++) { *a = "0" + *a; } } if (asize > bsize) { for (int i = 1; i <= asize - bsize; i ++) { *b = "0" + *b; } } } string splus(string a, string b) { string sum = ""; spluszero(&a, &b); bool jinwei = 0; for (int i = a.length() - 1; i >= 0; i --) { string ans = "0"; if (jinwei) { ans[0] ++; } ans[0] += (a[i] - '0' + b[i] - '0'); if (ans[0] >= '0' + 10) { jinwei = 1; ans[0] -= 10; } else { jinwei = 0; } sum = ans + sum; } if (jinwei) { sum = "1" + sum; } return sum; }
高精减及比较
void spluszero(string *a, string *b) { ... // 此处不再重复 } int sbijiao(string a, string b) { spluszero(&a, &b); for (int i = 0; i < min(a.length(), b.length()); i ++) { if (a[i] > b[i]) { return 1; } else if (a[i] < b[i]) { return -1; } } return 0; } string sminus(string a, string b) { string sum = ""; spluszero(&a, &b); bool isn = 0; if (sbijiao(a, b) == -1) { isn = 1; swap(a, b); } bool tuiwei = 0; for (int i = a.length() - 1; i >= 0; i --) { string ans = "$"; ans[0] = a[i]; if (tuiwei) { ans[0] --; } ans[0] -= (b[i]-'0'); if (ans[0] < '0') { tuiwei = 1; ans[0] += 10; } else { tuiwei = 0; } sum = ans + sum; } if (isn) { sum = "-" + sum; } return sum; }
高精乘
// 此处省略高精加、添零的代码 string scheng(string a, string b) { string ans = "", a1 = a; for (int i = b.length() - 1; i >= 0; i --) { string x = ""; for (int j = 1; j <= (b[i] - '0'); j ++) { x = splus(x, a1); } ans = splus(ans, x); a1 += "0"; } return ans; }
高精(整)除及去零
// 此处省略高精减、高精比较的代码 string sdelzero(string a) { string a1 = ""; bool aisntzero = 0; for (int i = 0; i < a.length(); i ++) { if ((a[i] == '-') && (i == 0)) { a1 += "-"; } elif (a[i] != '0') { aisntzero = 1; } if (aisntzero) { a1 += a[i]; } } if ((a1 == "") || (a1 == "-")) { a1 = "0"; } return a1; } string sfdiv(string a, string b) { string ans = "", a1 = sdelzero(a), b1 = sdelzero(b); if (b1 == "0") { return "NaN"; } else if (sbijiao(a1, b1) == -1) { return "0"; } else { string a2 = "", ans = ""; for (int i = 0; i < a1.length(); i ++) { int cnt = 0; a2 += a1[i]; a2 = sdelzero(a2); while (sbijiao(a2, b1) >= 0) { a2 = sminus(a2, b1); cnt ++; } ans += (cnt + '0'); } return sdelzero(ans); } }
高精幂、高精求余、高精阶乘
// 此处省略高精乘、高精除、去零及比较的代码 string spow(string a, string b) { a = sdelzero(a); b = sdelzero(b); if ((a == "0") && (b == "0")) { return "NaN"; } if (b == "0") { return "1"; } if (a == "0") { return "0"; } string ans = "1"; for (string i = "1"; sbijiao(i, b) <= 0; i = splus(i, "1")) { ans = scheng(ans, a); } return ans; } string smod(string a, string b) { if (sdelzero(b) == "0") return "NaN"; return sdelzero(sminus(a, scheng(sfdiv(a, b), b))); } string sfac(string a) { a = sdelzero(a); string ans = "1"; for (string i = "2"; sbijiao(i, a) <= 0; i = splus(i, "1")) { ans = scheng(ans, i); } return ans; }
数据结构
栈
#define LSTACK_MAX 10000 template <typename T>struct lstack { T a[LSTACK_MAX + 1] = {}; int pos = 0; bool push(T x) { if (pos <= LSTACK_MAX) { pos ++; a[pos] = x; } return (pos <= LSTACK_MAX); } bool pop() { if (pos > 0) { a[pos] = 0; pos --; return true; } else { return false; } } T len() { return pos; } T top() { string st = typeid(string).name(); string bt = typeid(bool).name(); string tt = typeid(T).name(); if (tt == st) { return a[pos]; } if (pos > 0) { return a[pos]; } else { if (tt == bt) { return 0; } return -1; } } };
队列
#define LQUEQE_MAX 10000 template <typename T> struct lqueqe { T a[LQUEQE_MAX + 1] = {}; int top = 1, end = 0; bool isnull = 1; int len() { if (isnull) { return 0; } else if ((end - top) < 0) { return end - top + LQUEQE_MAX + 1; } else { return end - top + 1; } } bool push(T x) { bool flag = 0; if (len() != LQUEQE_MAX) { if (isnull == 1) { isnull = 0; } flag = 1; if (end == LQUEQE_MAX) { end = 0; } end ++; a[end] = x; } return flag; } bool pop() { bool flag = 0; if (len() != 0) { flag = 1; a[top] = 0; if (len() == 1) { isnull = 1; } top ++; if (top > LQUEQE_MAX) { top = 1; } } return flag; } T c_end() { if (len() != 0) { return a[end]; } else { return -1; } } T c_top() { if (len() != 0) { return a[top]; } else { return -1; } } }; template <> struct lqueqe<bool> { bool a[LQUEQE_MAX + 1] = {}; int top = 1, end = 0; bool isnull = 1; int len() { if (isnull) { return 0; } else if ((end - top) < 0) { return end - top + LQUEQE_MAX + 1; } else { return end - top + 1; } } bool push(bool x) { bool flag = 0; if (len() != LQUEQE_MAX) { if (len() == 0) { isnull = 0; } flag = 1; if (end == LQUEQE_MAX) { end = 0; } end ++; a[end] = x; } return flag; } bool pop() { bool flag = 0; if (len() != 0) { flag = 1; a[top] = 0; if (len() == 1) { isnull = 1; } top ++; if (top > LQUEQE_MAX) { top = 1; } } return flag; } bool c_end() { if (len() != 0) { return a[end]; } else { return 0; } } bool c_top() { if (len() != 0) { return a[top]; } else { return 0; } } }; template <> struct lqueqe<string> { string a[LQUEQE_MAX + 1] = {}; int top = 1, end = 0; bool isnull = 1; int len() { if (isnull) { return 0; } else if ((end - top) < 0) { return end - top + LQUEQE_MAX + 1; } else { return end - top + 1; } } bool push(string x) { bool flag = 0; if (len() != LQUEQE_MAX) { if (len() == 0) { isnull = 0; } flag = 1; if (end == LQUEQE_MAX) { end = 0; } end ++; a[end] = x; } return flag; } bool pop() { bool flag = 0; if (len() != 0) { flag = 1; a[top] = ""; if (len() == 1) { isnull = 1; } top ++; if (top > LQUEQE_MAX) { top = 1; } } return flag; } string c_end() { if (len() != 0) { return a[end]; } else { return ""; } } string c_top() { if (len() != 0) { return a[top]; } else { return ""; } } };
Python
常用工具集合
code = 0 while True: a = input('请选择功能: 0. 退出 1. 十进制转二进制 2. 二进制转十进制 3. 计算器 4. 数字比较 5. 列表去重 6. 列表排序 7. 进制转换 8. 体积/表面积计算 9. 求和/求积 A. 计算器设置 \n请在此处输入:') if a == '0': break if a == '1': two_number = 0 number = int(input('(0~1023)请输入你要转二进制的数: ')) if number // 512 >= 1: two_number += 1000000000 number -= 512 if number // 256 >= 1: two_number += 100000000 number -= 256 if number // 128 >= 1: two_number += 10000000 number -= 128 if number // 64 >= 1: two_number += 1000000 number -= 64 if number // 32 >= 1: two_number += 100000 number -= 32 if number // 16 >= 1: two_number += 10000 number -= 16 if number // 8 >= 1: two_number += 1000 number -= 8 if number // 4 >= 1: two_number += 100 number -= 4 if number // 2 >= 1: two_number += 10 number -= 2 if number % 2 == 1: two_number += 1 print('转换完成,结果是 ' + str(two_number)) if a == '2': ten_number = 0 number = int(input('(0~1111111111)请输入你要转十进制的数: ')) if number // 1000000000 >= 1: ten_number += 512 number -= 1000000000 if number // 100000000 >= 1: ten_number += 256 number -= 100000000 if number // 10000000 >= 1: ten_number += 128 number -= 10000000 if number // 1000000 >= 1: ten_number += 64 number -= 1000000 if number // 100000 >= 1: two_number += 32 number -= 100000 if number // 10000 >= 1: ten_number += 16 number -= 10000 if number // 1000 >= 1: ten_number += 8 number -= 1000 if number // 100 >= 1: ten_number += 4 number -= 100 if number // 10 >= 1: ten_number += 2 number -= 10 if number // 1 == 1: ten_number += 1 print('转换完成,结果是 ' + str(ten_number)) if a == '3': one = float(input('请输入第一个数字: ')) if one % 1 == 0: one = int(one) two = input('请输入运算符号: ') if two == '~': four = str(~ one) print('计算完成,结果是: ' + four) continue three = float(input('请输入第二个数字: ')) if three % 1 == 0: three = int(three) if two == '+': four = one + three if two == '-': four = one - three if two == '*': four = one * three if two == '**': four = one ** three if two == '&': four = one & three if two == '|': four = one | three if two == '^': four = one ^ three if two == '<<': four == one << three if two == '>>': four == one >> three if three != 0: if two == '/': if code == 0: four = one / three if code == 1: if one % three == 0: four = one / three else: four = str(int(one // three)) + ' 余 ' + str(one % three) if two == '//': four = one // three if two == '%': four = one % three else: if two == '/' or two == '//' or two == '%': print('除数不能为0!') if not ((code == 1 and two == '/') or ((three == 0) and (two == '/' or two == '//' or two == '%'))): if four % 1 == 0: four = str(int(four)) else: four = str(four) if not ((three == 0) and (two == '/' or two == '//' or two == '%')): print('计算完成,结果是: ' + four) if a == '4': num1 = float(input('请在此处输入你第一个想比较的数字: ')) num2 = float(input('请在此处输入你第二个想比较的数字: ')) if num1 < num2: print('比较完成,结果是: 小于') if num1 > num2: print('比较完成,结果是: 大于') if num1 == num2: print('比较完成,结果是: 等于') if a == '5': liebiao = input('请输入你要去重的列表(用空格分割): ').split() cho_lst = input('1. 快速去重 2. 标准去重: ') print('去重完成,去重完的列表是: ') if cho_lst == '1': print(list(set(liebiao))) elif cho_lst == '2': templist = [] for i in liebiao: if i not in templist: templist.append(i) print(templist) if a == '6': stlst = input('请输入你要排序的列表(用空格分割): ').split() ltc = input('1. 字符串排序 (字典序) 2. 标准排序 (数值排序): ') ifrev = int(input('1. 正序排序 (从小到大) 2. 逆序排序 (从大到小): ')) - 1 if ltc == '1': ''' No Text Here ''' if ltc == '2': for i in range(len(stlst)): stlst[i] = int(stlst[i]) stlst.sort(reverse = int(ifrev)) print("排序完成,排序完的列表是: ") print(stlst) if a == '7': seven_1 = input('请输入你要转换进制的数: ') seven_2 = int(input('请输入转换前的进制: ')) print('转换成功,结果为 ' + str(int(seven_1, seven_2))) if a == '8': lst1 = input('1. 正方体 2. 长方体 3. 圆柱体: ') lst2 = input('1. 表面积 2. 体积:') if lst1 == '1': c1_a = float(input('请输入棱长: ')) if lst1 == '2': c2_a = float(input('请输入长度: ')) c2_b = float(input('请输入宽度: ')) c2_h = float(input('请输入高度: ')) if lst1 == '3': c3_r = float(input('请输入底面半径: ')) c3_h = float(input('请输入高度: ')) if lst1 == '1': if lst2 == '1': print('表面积是: ' + str(c1_a * c1_a * 6)) if lst2 == '2': print('体积是: ' + str(c1_a ** 3)) if lst1 == '2': if lst2 == '1': print('表面积是: ' + str(2 * c2_a * c2_b + 2 * c2_a * h + 2 * c2_b * h)) if lst2 == '2': print('体积是: ' + str(c2_a * c2_b * c2_h)) if lst1 == '3': if lst2 == '1': print('表面积是: ' + str(3.14 * (c3_r ** 2) + c3_h * (6.28 * c3_r))) if lst2 == '2': print('体积是: ' + str(3.14 * (c3_r ** 2) * h)) if a == '9': nine_lst = [int(i) for i in input('请输入你要求和/求积的列表(用空格分割): ').split()] ipt_9 = input('1. 求和 2. 求积: ') if ipt_9 == '1': print('总和: ' + str(sum(nine_lst))) if ipt_9 == '2': ans9 = 1 for i in nine_lst: ans9 *= i print('乘积: ' + str(ans9)) if a == 'A': if code == 0: b = input('计算器除法设置:当前是未开启余数模式,你要切换模式吗? (yes/no) ') if b == 'yes': print('切换成功!') code = 1 continue if code == 1: b = input('计算器除法设置:当前是开启余数模式,你要切换模式吗? (yes/no) ') if b == 'yes': print('切换成功!') code = 0 continue
猜关键字游戏(特别鸣谢:
8+3i我不是8+3i)import random words = ['int','float','if','struct','double','class','case','switch','default','char','bool','public','enum','else','do','while','auto','register','static','extern','mutable','private','sizeof','new','long','delete','this','friend','const','protected','return','void','using','namespace','union','template','typename','virtual','typedef','explicit','operator','unsigned','static_cast','wchar_t','inline','typeid','catch','throw','try','true','false'] # 关键字可以多加亿点哦! ''' 核桃OJ 独有关键字 words.append('in') words.append('cpu') words.append('finally') words.append('each') words.append('final') words.append('interface') words.append('array') ''' ''' Embarcadero Dev-C++ 独有关键字 words.append('char8_t') words.append('char16_t') words.append('char32_t') ''' print('当前版本3.7+i\n=========C++关键字九连猜=========\n每次可以猜一个字符,如果关键字\n中包含这个字符,那么字符会显示\n出来,否则失去一条命。') def check(x,y,z): w = '' if y in chars: return '\u0000' chars.append(y) for v in range(len(x)): if z[v] == y: w += y else: w += x[v] if w == x: return '' else: return w while True: chars = [] word = words[random.randint(0,len(words))] lives = 9 guess_word = '?' * len(word) while lives > 0: print() print(' ',guess_word) print() print('猜神秘关键字的一个字符?') a = input('>>>') if len(a) != 1: print('请输入一个字符!') continue b = check(guess_word,a,word) if b: if b != '\u0000': guess_word = b if guess_word != word: print('恭喜你猜对了!') else: print('这个字符已经猜过了!') else: lives -= 1 print('真遗憾猜错了\n剩余生命:'+str(lives)) if guess_word == word: break if guess_word == word: print('恭喜您猜出了神秘关键字,你真厉害!') else: print('真遗憾,您用完了所有生命,游戏失败。') print('神秘关键字是:'+word) p = -1 while True: x = input('要再玩一次吗? (y/n)') if x == 'y': p = 1 break elif x == 'n': p = 0 break if p == 1: continue else: break
猜数游戏(非原创,原作者为小月月1)
import random numbers = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'] random.shuffle(numbers) password = numbers[0] + numbers[1] + numbers[2] a = 20 while a > 0: guess = input('请输入一个三位数:') a-=1 if len(guess) != 3: print('输入格式有误,请重新输入') continue if guess == password: if a >= 10: print('*_*,你也太厉害了!这么快就猜对了!') break elif a < 10 and (a!=1 or a!= 0): print("-_-"+"'"+",你怎么这么慢才猜对呀?") break else: print('你也太慢啦!') else: for i in range(3): if guess[i] == password[i]: print(guess[i], '正确') else: if guess[i] in password: print(guess[i], '在其他位置上') else: print(guess[i], '错误') else: print('猜猜次数已用完,你输啦!正确答案是:'+password) print('游戏结束,不玩啦!')
杂项
在 C++ 和 Python 都能运行的代码
在 C++ 中的效果
#if 0 ''' #endif // 在这里输入 C++ 的代码 #if 0 ''' # 在这里输入 Python 的代码 #endif
在 Python 中的效果
#if 0 ''' #endif // 在这里输入 C++ 的代码 #if 0 ''' # 在这里输入 Python 的代码 #endif
顺便看一下我的
新旧视频: -
通过的题目
-
最近活动
This person is lazy and didn't join any contests or homework. -
最近编写的题解
This person is lazy and didn't write any solutions.
题目标签
- 客观题
- 1