1.
def find(x):
res = []
for i in range(1,x+1):
if '2' in str(i):
res.append(str(i).count('2'))
print(sum(res))
find(2020)
2.
totle_amount=0
def func(a,b):
x = a % b
while (x != 0):
a = b
b = x
x = a % b
return b
for i in range(1,2021):
for j in range(1,2021):
if func(i,j)==1:
totle_amount+=1
# print("{}:{}/{}是既约分数".format(totle_amount,i,j))
print(totle_amount)
3.
n = 20
an = 1
for i in range(1,20):
an = an+4*i
i += 1
print(an)
4.
year=2000
mouth=1
day=1
week=6
count=0
mouthday=[0,31,28,31,30,31,30,31,31,30,31,30,31] #月份对齐索引标号所以以0开始
def runnian(year):
if year%4==0 and year%100!=0:
return True
elif year%400==0:
return True
else:
return False
while year!=2020 or mouth!=10 or day!=1:
if runnian(year):
mouthday[2]=29
else:
mouthday[2]=28
day=day+1
week=(week+1)%7
if day>mouthday[mouth]:
day=1
mouth+=1
if mouth>12:
mouth=1
year+=1
if day==1 or week==1:
count+=1
count+=1
count+=2
print(count)
5.
# Drawdigit.py
import turtle
def drawLine(draw): # 绘制单段数码管
turtle.pendown() if draw else turtle.penup()
turtle.forward(40)
turtle.right(90)
def drawDigit(digit): # 根据数字绘制七段数码管
drawLine(True) if digit in [2, 3, 4, 5, 6, 8, 9] else drawLine(False)
drawLine(True) if digit in [0, 1, 3, 4, 5, 6, 7, 8, 9] else drawLine(False)
drawLine(True) if digit in [0, 2, 3, 5, 6, 8, 9] else drawLine(False)
drawLine(True) if digit in [0, 2, 6, 8] else drawLine(False)
turtle.left(90)
drawLine(True) if digit in [0, 4, 5, 6, 8, 9] else drawLine(False)
drawLine(True) if digit in [0, 2, 3, 5, 6, 7, 8, 9] else drawLine(False)
drawLine(True) if digit in [0, 1, 2, 3, 4, 7, 8, 9] else drawLine(False)
turtle.left(180)
turtle.penup() # 为绘制后续数字确定位置
turtle.forward(30) # 未确定后续数字确定位置
def drawDate(date): # 获得要输出的数字
for i in date:
drawDigit(eval(i)) # 通过eval将字符串编程整数
def main():
turtle.setup(800, 300, 200, 200)
turtle.penup()
turtle.forward(-300)
turtle.pensize(8)
drawDate("20181010")
turtle.done()
main()
6.
n = int(input())
good = []
better = []
v1,v2 = 0,0
for i in range(n):
s = int(input())
if s >= 60:
better.append(s)
for j in better:
if j >= 85:
good.append(j)
v1 = len(better)/n
v2 = len(good)/n
print("{:.0f}%".format(v1*100))
print("{:.0f}%".format(v2*100))
7.
from calendar import isleap
gap_year = [0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
normal_year = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
def judge(date, is_gap):
month = int(date[:2])
day = int(date[2:])
if month > 12:
return False
if is_gap:
return day < gap_year[month]
else:
return day < normal_year[month]
def judge_next_year(year: str):
res_year = year[::-1]
new_year = year + res_year
revers_str = new_year[::-1]
if new_year == revers_str:
is_gap = isleap(int(year))
flag = judge(res_year, is_gap)
if flag:
return [True, revers_str]
else:
return [False, revers_str]
else:
return [False, revers_str]
def get_next(data: str):
year = data[:4]
res = list()
while True:
year = str(int(year) + 1)
ans = judge_next_year(year)
flag, tmp = ans[0], ans[1]
if flag:
res.append(tmp)
break
num = int(data[0:2])
while True:
num += 1
year = str(num) + str(num)
ans = judge_next_year(year)
flag, tmp = ans[0], ans[1]
if flag:
res.append(tmp)
break
return res
if __name__ == '__main__':
data = input()
res = get_next(data)
for i in res:
print(i)
8.
str1 = input()
n = len(str1)
sum = 0
for i in range(len(str1)):
t = str1.rfind(str1[i],0,i)
if t<i:
sum += (i-t)*(n-i)
else:
sum += (i+1)*(n-i)
print(sum)
9.
count = 2
for i in range(2, 21):
count += i
for i in range(40,80,2):
count += i
print(count)
10
import java.util.Scanner;
public class Main {
static int list[]={//存放后缀序列,这样插和删除很容易
0,0,0,0,0,//注cccbba=1,2,3,0,……
0,0,0,0,0,
0,0,0,0,0,
0,0,0,0,0,
0,0,0,0,0,
0
};
static int[] str=new int[300];//存放前缀序列
static void reset() {//后缀序列清零
int i=0;
while(i<26&&list[i]!=0) {
list[i]=0;
++i;
}
}
static int getrnum() {//计算逆序数(分三步)
int cnt=0;
for(int i=0;str[i]!=0;++i) {//前缀的逆序数
for(int j=i;str[j]!=0;++j) {
if(str[i]>str[j]) {
++cnt;
}
}
}
for(int i=0;str[i]!=0;++i) {//前缀对后缀的逆序数
for(int j=25;j>=0;--j) {
if(str[i]-'a'>j) {
cnt+=list[j];
}
}
}
int temp=0;
for(int i=0;i<26;++i) {//后缀的逆序数
cnt+=temp*list[i];
temp+=list[i];
}
return cnt;
}
static int getinc(int c) {//获得最大逆序增量(特殊步骤中代替求逆序数函数用来提速)(可以认为在数字符串里有多少非c(传入的参数)字符)(也就是插入c逆序数能增加多少)
int i=0,cnt=0;
while(str[i]!=0) {
if(str[i]>(c+'a')) {
cnt++;
}
++i;
}
for(i=0;i<26;++i) {
if(i!=c) {
cnt+=list[i];
}
}
return cnt;
}
static void set() {//在后部序列中插入元素,保证逆序数最大
int max=0,temp=0,index=0;
for(int i=0;i<26;++i) {
list[i]++;
if((temp=getinc(i))>max) {//找出使逆序数增得最快的字符插入(这里比用增而直接记录逆序数不影响结果,但慢一些,数据10000左右要5秒左右,会超时的,不然我也不会编这么个对于的函数。。)
index=i;
max=temp;
}
list[i]--;
}
list[index]++;
}
static void getMaxStr(int l) {//获取前缀确定且长度确定的前提下的最大逆序数字串
reset();
for(int i=0;str[i]!=0;++i,--l);
while(l>0) {
set();
--l;
}
}
static void printstr() {//打印目标字符串
String Str="";
int i=0;
while(str[i]!=0) {
Str+=(char)str[i];
++i;
}
for(i=25;i>=0;--i) {//这里其实没用,既然不执行也不会影响效率,留着吧,后缀最后是空的,但曾经存在过。。。
for(int j=0;j<list[i];++j) {
Str+=(char)(i+'a');
}
}
System.out.println(Str);
}
static void getans(int num,int l) {//l是字串长度
for(int i=0;i<l;++i) {
for(int j=0;j<26;++j) {//每个位从a开始试
str[i]=j+'a';
getMaxStr(l);//获取指定前缀最大逆字串
if(getrnum()>=num) {//超了就下一个
break;
}
}
}
}
public static void main(String[] args){//这了很简洁了
int num;
Scanner sc = new Scanner(System.in);
num=sc.nextInt();//获取输入
sc.close();
int l=0;
while(getrnum()<num) {//获取最短字串长
++l;
getMaxStr(l);
}
getans(num,l);//获得目标字串
printstr();//打印
}
}