9数算式

题目描述

本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。

观察如下的算式:

9213×85674=7893145629213×85674=789314562

左边的乘数和被乘数正好用到了 11 ~ 99 的所有数字,每个 11 次。 而乘积恰好也是用到了 11 ~ 99 的所有数字,并且每个 11 次。

请你借助计算机的强大计算能力,找出满足如上要求的 99 数算式一共有多少个?

注意:

  1. 总数目包含题目给出的那个示例。

  1. 乘数和被乘数交换后作为同一方案来看待。

求解

使用itertools.permutations函数生成全排列。

from itertools import *
s='123456789'
cnt=0
for e in permutations(s):
    for i in range(4):
        a=''.join(e[:i+1])
        b=''.join(e[i+1:])
        c=int(a)*int(b)
        c=str(c)
        if '1'in c and '2' in c and '3' in c and '4' in c \
           and '5' in c and '6' in c and '7' in c and '8' in c \
           and '9' in c:
            cnt+=1
print(cnt)    

问题描述

本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。

这天小明正在学数数。

他突然发现有些止整数的形状像一挫 “山”, 比㓚 123565321、145541123565321、145541, 它 们左右对称 (回文) 且数位上的数字先单调不减, 后单调不增。

小朋数了衣久也没有数完, 他惒让你告诉他在区间 [2022,2022222022][2022,2022222022] 中有 多少个数的形状像一座 “山”。

求解

暴力。

from math import *
cnt=0
for i in range(2022,2022222023):
    s=str(i)
    l=len(s)
    flag=1
    for i in range(ceil(l/2)):
        if s[i]!=s[l-i-1]:
            flag=0
            break
        if i>=1:
            if s[i]<s[i-1]:
                flag=0
                break
    if flag==1:
        cnt+=1
print(cnt)

最少刷题数

问题描述

小蓝老师教的编程课有 N 名学生, 编号依次是 1…N 。第 i 号学生这学期 刷题的数量是 Ai

对于每一名学生, 请你计算他至少还要再刷多少道题, 才能使得全班刷题 比他多的学生数不超过刷题比他少的学生数。

输入格式

第一行包含一个正整数 N

第二行包含 N 个整数: A1,A2,A3,…,AN.

输出格式

输出 N 个整数, 依次表示第 1…N 号学生分别至少还要再刷多少道题。

样例输入

5
12 10 15 20 6

样例输出

0 3 0 0 7

评测用例规模与约定

对于 30%30% 的数据,1≤N≤1000,0≤Ai≤1000.

对于 100%100% 的数据,1≤N≤100000,0≤Ai≤100000.

求解

模拟,通过率40%,超时了。

每个学生都进行一次循环,复制一次题目给的A数组。对所有的数值元素先减掉当前对应学生的分数,记录小于0的个数,并移除它们;也记录大于0的元素个数。接着做循环,对所有的数组元素减1,大于0元素个数重新统计,小于0的则累加,直到大于0元素不超过小于0元素为止。

from copy import *
n=int(input())
A=list(map(int,input().split()))
for i in range(n):
    A_c=A.copy()
    now=A[i]
    shao=0
    duo=0
    del A_c[i]
    i=0
    for _ in range(n-1):
        A_c[i]=A_c[i]-now
        if A_c[i]>0:
            duo+=1
        if A_c[i]<0:
            shao+=1
            del A_c[i]
            i-=1
        i+=1
    if(duo<=shao):
        print('0',end=' ')
    tishu=0
    while(duo>shao):
        tishu+=1
        duo=0
        l=len(A_c)
        i=0
        for _ in range(l):
            A_c[i]-=1
            if A_c[i]>0:
                duo+=1
            if A_c[i]<0:
                shao+=1
                del A_c[i]
                i-=1
            i+=1
        if(duo<=shao):
            # print(shao,'shao',duo,'duo')
            print(tishu,end=' ')
            

完全平方数

问题描述

一个整数a 是一个完全平方数, 是指它是某一个整数的平方, 即存在一个 整数 b, 使得 a=b2

给定一个正整数 n, 请找到最小的正整数 x, 使得它们的乘积是一个完全平 方数。

输入格式

输入一行包含一个正整数 n

输出格式

输出找到的最小的正整数 x

样例输入 1

12

样例输出 1

3

样例输入 2

15

样例输出 2

15

评测用例规模与约定

对于 3030 的评测用例, 1≤n≤1000, 答案不超过 1000 。

对于 6060 的评测用例, 1≤n≤108, 答案不超过 108

对于所有评测用例,1≤n≤1012, 答案不超过 1012

求解

通过率60%,有些错误。

首先判断n本身是不是完全平方数(包括1),如果是输出1。

如果n不是完全平方数,找n的因子,如果它是完全平方数,就输出n/它的因子。

如果找遍所有因子无果,就输出n。

n=int(input())
flag=0
if(int(pow(n,0.5))*int(pow(n,0.5))==n):
    print(1)
else:
    for i in range(2,int(pow(n,0.5))+1):
        if(n%i==0):
            for j in range(2,int(pow(i,0.5))+1):
                if j*j==i:
                    print(int(n/i))
                    flag=1
                    break
        if flag==1:
            break
    if(flag==0):
        print(int(n))

posted on 2023-03-07 13:52  快乐的乙炔  阅读(0)  评论(0)    收藏  举报  来源