9数算式
题目描述
本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。
观察如下的算式:
9213×85674=7893145629213×85674=789314562
左边的乘数和被乘数正好用到了 11 ~ 99 的所有数字,每个 11 次。 而乘积恰好也是用到了 11 ~ 99 的所有数字,并且每个 11 次。
请你借助计算机的强大计算能力,找出满足如上要求的 99 数算式一共有多少个?
注意:
总数目包含题目给出的那个示例。
乘数和被乘数交换后作为同一方案来看待。
求解
使用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))
浙公网安备 33010602011771号