'''143,奇怪的函数
使得 x**x达到或超过 n 位数字的最小正整数 x 是多少?
输入
一个正整数 n
输出
使得 x**x 达到 n 位数字的最小正整数 x
样例输入11
样例输出10
保证n<=2000000000
'''import math
defcheck(a,n):return a*math.log10(a)>=n-1
n=int(input("请输入正整数n:"))
l=1
r=1000000000while l<r/10:
mid=(1+r)//10if check(mid,n):
r=mid
else:
l=mid
print(r)#print(check(3,3))
144
'''144,输入N和K,再输入N个数形成列表,不改变这些数的位置顺序,
将这些数划分为K组,这K个组就有K个和,请问如果划分,能让这K个和的最大值最小,
输出这个最小的最大和。
''''''N,K=map(int,input("请输入N,K:").split())
l1=[]
for i in range(N):
l1.append(int(input()))
'''classSolution:defsplitArray(self, nums:list[int], m:int)->int:defcountGroups(mid):
temp =0
count =1for num in nums:
temp += num
if temp > mid:
count +=1
temp = num # 准备下一组return count
left, right =max(nums),sum(nums)while left < right:
mid = left +(right - left)//2
num_group = countGroups(mid)if num_group > m:# 划分多了,mid太小了
left = mid +1else:
right = mid
print(left, mid, right)return left # left恰好是满足条件的最少分割,自然就最大
144-2
'''输入N和K,再输入N个数形成列表,不改变这些数的位置顺序,将这些数划分为K组,这K个组就有K个和,
请问如果划分,能让这K个和的最大值最小,输出这个最小的最大和。
'''defKpart(arr,start,end,k):if k ==1:sum=0for i inrange(start,end+1):sum+=arr[i]returnsumelif(end-start+1)==k:max=2147483647for i inrange(start,end+1):if arr[i]>max:max=arr[i]returnmaxmin=-2147483648for i inrange(start,end+1-k+1):sum=0for j inrange(start,i+1):sum+=arr[j]ifsum>Kpart(arr,i+1,end,k-1):
larger=sumelse:
larger=Kpart(arr,i+1,end,k-1)if larger<min:min=larger
# -2147483648returnmin