蓝桥杯练习系统刷题记录 python

01字串

#1.思路:其实是将0-31之间的十进制数转换为二进制数并输出,而转换的方式和获得十进制数每位的方式一样,只是基数变为2
#2.输出指定位数填零的方式(1)print('%05d'%a)(2)print(s1.zfill(5))
#3.整数想要除后获得整数,要用整除符号//,否则会得到浮点数。

for i in range(0,32):
    if i == 0:
        print("00000")
    else:
        num = i
        s = ""
        j = 0
        while num > 0:
            s = str(num % 2) + s
            num = num // 2
            j = j + 1
        while j < 5:
            s = "0" + s
            j = j + 1
        print(s)

字母图形

#1.思路:观察规则就行辽
#2.字符转ASCII码:ord(),ASCII码转字符:chr()

n,m = map(int,input().split())
begin = ord('A')

for i in range(0,n):
    for j in range(0,m):
        if j < i:
            print(chr(begin + i - j),end = '')
        else:
            print(chr(begin + j - i),end = '')
    print('')
            

数列特征

#思路:遍历加和比大小
n = int(input())
lis = [int(x) for x in input().split()]
min = 10000
max = -10000
sum = 0
for x in lis:
    if x < min:
        min = x
    if x > max:
        max = x
    sum += x
print(max)
print(min)
print(sum)

查找整数

python中list的四种查找方法

#1.思路:用list的index函数查找a(注意上面四种查找方法)
#2.查找前注意把a的类型变成int
#3.index查找不到会报错,用try-except在查找不到时输出-1
n = input()
array = [int(x) for x in input().split()]
a = int(input())

try:
    print(array.index(a) + 1)
except:
    print(-1)

杨辉三角形

#注意python的print自带换行,不想换行的话用end=‘’
n = int(input())
triangle = [[0 for i in range(n)] for j in range(n)]

for i in range(n):
    triangle[i][0] = 1
    triangle[i][i] = 1

for i in range(2,n):
    for j in range(1,i+1):
        triangle[i][j] = triangle[i-1][j-1] + triangle[i-1][j]

for i in range(0,n):
    for j in range(0,i+1):
        print(triangle[i][j],end = '')
        if j != i:
            print(' ',end = '')
        else:
            print('')

c++代码:

//注意每个数字的下标
#include<iostream>

using namespace std;

int main(){
	int triangle[34][34];
	int n;
	cin>>n;
	for(int i = 0;i < n;i++){
		triangle[i][0] = 1;
		triangle[i][i] = 1;
	}
	for(int i = 2;i < n;i++){
		for(int j = 1;j < i;j++){
			triangle[i][j] = triangle[i-1][j] + triangle[i-1][j-1];
		}
	}
	for(int i = 0;i < n;i++){
		for(int j = 0;j <= i;j++){
			cout<<triangle[i][j];
			if(j != i ){
				cout<<" ";
			}
		}
		cout<<endl;
	}
	return 0;
} 

特殊的数字

python中math包的函数

import math


for i in range(100,1000):
    ge = i  % 10
    shi = i //10 % 10
    bai = i//100%10
    if math.pow(ge,3) + math.pow(shi,3) + math.pow(bai,3) == i:
        print(i)

c++代码:

#include<iostream>
#include<cmath>

using namespace std;

int main(){
	for(int i = 100;i < 1000;i++){
		int ge = i % 10;
		int shi = i / 10 % 10;
		int bai = i / 100 % 10;
		if(pow(ge,3)+pow(shi,3)+pow(bai,3) == i){
			cout<<i<<endl;
		}
	}
	return 0;
} 

回文数


for i in range(1000,10000):
    ge = i  % 10
    shi = i //10 % 10
    bai = i//100%10
    wan  = i //1000%10
    if ge == wan and shi == bai:
        print(i)

c++代码:

#include<iostream>
#include<cmath>

using namespace std;

int main(){
	for(int i = 1000;i < 10000;i++){
		int ge = i % 10;
		int shi = i / 10 % 10;
		int bai = i / 100 % 10;
		int qian = i / 1000 % 10;
		if(ge == qian && bai == shi){
			cout<<i<<endl;
		}
	}
	return 0;
} 

十进制转十六进制

#所有跟取余有关的题注意a=0情况
#我居然变量名写错了你敢信???
t216 = ['0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F']

a = int(input())

sixteen = ""

if a == 0:
    print(0)

while a > 0:
    sixteen = t216[a%16] + sixteen
    a = a//16

print(sixteen)


c++代码

//注意a=0的情况

#include<iostream>
#include<cmath>

using namespace std;

char shu[16] = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};

int main(){
	long a;
	cin>>a;
	char x[10];
	int i = 0;
	if(a == 0){
		cout<<0;
	}
	while(a > 0){
		x[i++] = shu[a % 16];
		a /= 16;
	}
	for(int n = i - 1; n >= 0;n--){
		cout<<x[n];
	}
	return 0;
} 

十六进制转十进制

#判断字符串长度:len(string)
sixteen = str(input())

ten = 0

for i in range(len(sixteen)):
    if sixteen[i] >= '0' and sixteen[i] <= '9':
        ten = ten * 16 + (ord(sixteen[i]) - ord('0'))
    else:
        ten = ten * 16 + (ord(sixteen[i] )- ord('A')) + 10

print(ten)

c++代码:

//注意数开大点
#include<iostream>
#include<string>

using namespace std;

char shu[16] = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};

int main(){
	string shiliu;
	cin>>shiliu;
	long long shi = 0;
	for(int i = 0;i < shiliu.length();i++){
		if(shiliu[i] >= '0' && shiliu[i] <= '9'){
			shi = shi * 16 + (shiliu[i] - '0');
		}else{
			shi = shi * 16 + (shiliu[i] - 'A' + 10);
		}
	}
	cout<<shi;
	return 0;
} 

十六进制转八进制

#先转二进制再转八进制
#注意填充0那里

import math

si22 = ["0000","0001","0010","0011","0100","0101","0110","0111","1000","1001","1010","1011","1100","1101","1110","1111"]

n = int(input())

for i in range(n):
    eight = ""
    two = ""
    sixteen = str(input())
    for i in range(0,len(sixteen)):
        if sixteen[i] >= '0' and sixteen[i] <= '9':
            two += si22[ord(sixteen[i]) - ord('0')]
        else:
            two += si22[ord(sixteen[i]) - ord('A') + 10]


    if len(two) % 3 != 0:
        two = '0'*(3 - len(two) % 3) + two #这里注意是3减
        
    for i in range(0,len(two) - 2,3):
        eight += str(int(two[i])*pow(2,2) + int(two[i+1])*2 + int(two[i+2]))
    while eight[0] == '0':
        eight = eight[1:]

    print(eight)

c++代码:

//思路:十六进制转八进制,先转为二进制再回转
//数太大开字符数组,再大可以开string
#include<iostream>
#include<string>
#include<cmath>

using namespace std;

string shiliu22[16] = {"0000","0001","0010","0011","0100","0101","0110","0111","1000","1001","1010","1011","1100","1101","1110","1111"};

int main(){
	int n;
	cin>>n;
	while(n--){
		string shiliu;
		cin>>shiliu;
		string er = "";
		//转二进制
		for(int i = 0;i < shiliu.length();i++){
			int x;
			if(shiliu[i] >= '0'&& shiliu[i] <= '9'){
				x = shiliu[i] - '0';
			} else{
				x = shiliu[i] - 'A' + 10;
			}
			er += shiliu22[x];
		}
		string ba = "";
		//转八进制
		if(er.length() % 3 != 0){
			for(int i = 0; i < er.length()%3;i++){
				er = "0" + er;
			}
		}
		for(int i = er.length() - 1;i >= 0;i -= 3){
			string wei = er.substr(i - 2,3);
			char bai = (wei[0] - '0') * pow(2,2) + (wei[1] - '0')*2 + (wei[2] - '0') + '0';
			ba = bai + ba;
		} 
		while(ba[0] == '0'){
			ba.erase(0,1);
		}
		cout<<ba<<endl;
	}
	return 0;
} 

数列排序

n = int(input())

shuzu = [int(x) for x in input().split()]

for i in range(0,n-1):
    for j in range(i+1,n):
        if shuzu[i] > shuzu[j]:
            temp = shuzu[i]
            shuzu[i] = shuzu[j]
            shuzu[j] = temp

for x in shuzu:
    print(x,end = ' ')

c++代码:

#include<iostream>
#include<algorithm>

using namespace std;

int main(){
	int n;
	int shulie[200];
	cin>>n;
	for(int i = 0;i < n;i++){
		cin>>shulie[i];
	}
	sort(shulie,shulie + n);
	for(int i = 0;i < n;i++){
		cout<<shulie[i];
		if(i != n-1){
			cout<<" ";
		}
	}
	return 0;
} 

时间转换

#取余yyds

t = int(input())
h = t // 3600
ms = t % 3600
m = ms // 60
s = ms % 60

print('%d:%d:%d'%(h,m,s))

字符串对比

python3字符串的比较

s1 = str(input())
s2 = str(input())

l1 = len(s1)
l2 = len(s2)

if l1 != l2:
    print(1)
else:
    if s1 == s2:
        print(2)
    else:
        s1 = s1.lower()  #大写变小写
        s2 = s2.lower()
        if s1 == s2:
            print(3)
        else:
            print(4)

c++代码:

#include<iostream>
#include<string>
#include<cmath>

using namespace std;

int main(){
	string s1,s2;
	getline(cin,s1);
	getline(cin,s2);
	if(s1.length() != s2.length()){
		cout<<1;
	}else if(s1 == s2){
		cout<<2;
	}else{
		for(int i = 0;i < s1.length();i++){
			if(s1[i] >= 'A' && s1[i] <= 'Z'){
				s1[i] += 32;
			}
			if(s2[i] >= 'A' && s2[i] <= 'Z'){
				s2[i] += 32;
			}
		}
		if(s1 == s2){
			cout<<3;
		}else{
			cout<<4;
		}
	}
	return 0;
} 

分解质因数


#分解质因数的思路:从2到该数遍历质因数则加到列表里,将原数除去该质因数后再次分解该数
#“字符串”。j

def isprime(i):
    for j in range(2,int(i**0.5)+1):
        if i % j == 0:
            return 0
    return 1




def fenjie(i):
    for j in range(2,i+1):
        if i % j == 0 and isprime(j):
            l.append(str(j))
            i = i // j
            fenjie(i)
            break


a,b = map(int,input().split())


for i in range(a,b+1):
    l = []
    print("%d="%i,end = "")
    fenjie(i)
    if len(l) == 1:
        print(l[0])
    else:
        print("*".join(l))

2n皇后问题

在这里插入图片描述

#1.思路:跟n皇后问题同,只不过在第一次dfs执行完后需要执行第二次dfs才能保证得到了一个解(n皇后问题思路如图)
#2.二维数组的读取数据方式:qipan = [[int(x) for x in input().split()] for y in range(n)]
#3.两点在一条对角线上:abs(i1 - i2) == abs(j1 - j2)  注意不是i1 - i2 = j1 - j2 !!!!
import math
count = 0

def canplace(qipan:list,i,j,color):
    for ii in range(i):
        for jj in range(n):
            if qipan[ii][jj] == color:
                    if abs(ii - i) == abs(jj - j) or jj == j:
                        return False
    return True

def dfs(qipan:list,i,n):
    if i == n:
        dfs2(qipan,0,n)
        return
    for j in range(0,n):
        if qipan[i][j] == 1 and canplace(qipan,i,j,2):
            qipan[i][j] = 2
            dfs(qipan,i+1,n)
            qipan[i][j] = 1

def dfs2(qipan:list,i,n):
    global count
    if i == n:
        count += 1
        return
    for j in range(0,n):
        if qipan[i][j] == 1 and canplace(qipan,i,j,3):
            qipan[i][j] = 3
            dfs2(qipan,i+1,n)
            qipan[i][j] = 1

n = int(input())
qipan = [[int(x) for x in input().split()] for y in range(n)]
dfs(qipan,0,n)
print(count)

C++代码:

#include<iostream>
#include<cmath>
using namespace std;

int count = 0;
int n = 0;

int canplace(int qipan[8][8],int i,int j,int color){
	if(qipan[i][j] != 1){
		return 0;
	}
	for(int ii = 0;ii < i;ii++){
		for(int jj = 0;jj < n;jj++){
			if(qipan[ii][jj] == color){
				if(abs(ii-i) == abs(jj-j) || jj == j){
					return 0;
				}
			}
		}
	}
	return 1;
}

void dfs2(int qipan[8][8],int i){
	if(i == n){
		count++;
		return;
	}
	for(int j = 0;j < n;j++){
		if(canplace(qipan,i,j,3)){
			qipan[i][j] = 3;
			dfs2(qipan,i+1);
			qipan[i][j] = 1;
		}
	}
}


void dfs(int qipan[8][8],int i){
	if(i == n){
		dfs2(qipan,0);
		return;
	}
	for(int j = 0;j < n;j++){
		if(canplace(qipan,i,j,2)){
			qipan[i][j] = 2;
			dfs(qipan,i+1);
			qipan[i][j] = 1;
		}
	}
}




int main(){
	cin>>n;
	int qipan[8][8];
	for(int i = 0;i < n;i++){
		for(int j = 0;j < n;j++){
			cin>>qipan[i][j];
		}
	}
	dfs(qipan,0);
	cout<<count<<endl;
	return 0;
} 

FJ字符串

#python中字符串反转:s[::-1]倒转切片
n = int(input())

string = ""
for i in range(0,n):
    add = chr(ord('A') + i)
    string = string + add + string[::-1]

print(string)

c++代码:
c++中字符串反转的三种方法

//注意:reverse让string反转是直接对strin进行处理了,且不会返回处理后的字符串,所以要新建一个变量存储反转后的字符串
#include<iostream>
#include<string>
#include <algorithm>
using namespace std;

int main(){
	int n = 0;
	cin>>n;
	string str = "A";
	for(int i = 1;i < n;i++){
		string newstr = str;
		reverse(newstr.begin(),newstr.end());
		char add = 'A' + i;
		str = str + add + newstr;
	}
	cout<<str;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值