• 个人简介

    >>>旧版主页点此<<<


    这里不是 C_A_zhi_L 的主页! 某831学的

    站内外联系方式

    哔哩哔哩:点击此处

    共创世界(ccw.site):点击此处

    旧核桃OJ:点击此处

    新核桃OJ:

    1. 常用号
    2. 此号不常用

    洛谷:点击此处

    常用代码

    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