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)
查找整数
#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;
}
特殊的数字
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))
字符串对比
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;
}