第十一届

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();//打印
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值