記事のディレクトリ
1質問1
1.1問題の説明
整数の配列番号が与えられた場合、合計が最大の連続サブ配列を見つけて、最大の合計を出力します。
例:
入力:[-2,1、-3,4、-1,2,1、-5,4]
出力:6
1.2プログラムコード
def fun(inputs):
length=len(inputs)
if length==1:
return inputs[0]
maximum=sum(inputs) #假设数组的和最大
for i in range(0,2): #长度为length的数组有两个长度为length-1的连续子数组,索引分别为0:length-2和1:length-1
if maximum<fun(inputs[i:length-1+i]): #数组之和与连续子数组之和比较,取最大值
maximum=fun(inputs[i:length-1+i])
return maximum # 返回值为数组之和与自己的两个连续子数组之和(如果有)的最大值
if __name__=='__main__':
inputs = [] # 存储输入的整数
temp = input("请输入数据,若输入完毕,请输入'q'\n:")
while (temp != 'q'):
inputs.append(temp)
temp = input("请输入数据,若输入完毕,请输入'q'\n:")
inputs = [int(i) for i in inputs]
print('您输入的数组长度为' + str(len(inputs)) + ',如下:')
print(inputs)
print('连续子数组的最大和为:'+str(fun(inputs)))
以下は、入力と出力の例です。
请输入数据,若输入完毕,请输入'q'
:-2
请输入数据,若输入完毕,请输入'q'
:1
请输入数据,若输入完毕,请输入'q'
:-3
请输入数据,若输入完毕,请输入'q'
:4
请输入数据,若输入完毕,请输入'q'
:-1
请输入数据,若输入完毕,请输入'q'
:2
请输入数据,若输入完毕,请输入'q'
:1
请输入数据,若输入完毕,请输入'q'
:-5
请输入数据,若输入完毕,请输入'q'
:4
请输入数据,若输入完毕,请输入'q'
:q
您输入的数组长度为9,如下:
[-2, 1, -3, 4, -1, 2, 1, -5, 4]
连续子数组的最大和为:6
2質問2
2.1問題の説明
pow(x、n)を実現します。つまり、xのn乗を計算します。
例:
入力
:2.0000、2出力:4.0000
2.2プログラムコード
def my_pow(x,n):
value=1
if n==0:
return value
for i in range(1,n+1):
value=x*value
return value
if __name__=='__main__':
x=float(input('请输入一个实数:'))
n=int(input('请输入一个正整数:'))
print(my_pow(x,n))
以下は、入力と出力の例です。
请输入一个实数:-2.5
请输入一个正整数:3
-15.625
3質問3
3.1問題の説明
サイズnの配列が与えられた場合、出現回数が最も多い数を見つけて、その数を出力します。
例:
入力:[2,1,2,2,1,3,2,1,2,3]
出力:2
3.2プログラムコード
3.2.1非再帰的
再帰のないC ++コードは次のとおりです。
inputs=[] # 存储输入的整数
elements=[] # inputs中无重复的数字
temp_lists=[] # 临时列表
results=[] # 输出的结果
temp = input("请输入数据,若输入完毕,请输入'q'\n:")
while(temp!='q'):
inputs.append(temp)
temp = input("请输入数据,若输入完毕,请输入'q'\n:")
inputs = [int(i) for i in inputs]
print('您输入的数字如下:')
print(inputs)
for i in inputs:
if i not in elements:
elements.append(i)
for j in elements:
times=0
for i in inputs:
if i==j:
times+=1
temp_lists.append([j,times])
temp_lists=sorted(temp_lists,key=lambda x:x[1],reverse=True) # 排序
for i in temp_lists:
print(str(i[0])+'出现了'+str(i[1])+'次')
results.append(temp_lists[0][0]) # 出现次数排在第一的元素
for i in temp_lists[1:]: # 出现次数最多的元素可能不止一个,可能有多个
if i[1]==temp_lists[0][1]:
results.append(i[0])
print('出现次数最多的数如下:')
print(results)
以下は、入力と出力の例です。
请输入数据,若输入完毕,请输入'q'
:2
请输入数据,若输入完毕,请输入'q'
:1
请输入数据,若输入完毕,请输入'q'
:2
请输入数据,若输入完毕,请输入'q'
:2
请输入数据,若输入完毕,请输入'q'
:1
请输入数据,若输入完毕,请输入'q'
:3
请输入数据,若输入完毕,请输入'q'
:2
请输入数据,若输入完毕,请输入'q'
:1
请输入数据,若输入完毕,请输入'q'
:2
请输入数据,若输入完毕,请输入'q'
:3
请输入数据,若输入完毕,请输入'q'
:q
您输入的数字如下:
[2, 1, 2, 2, 1, 3, 2, 1, 2, 3]
2出现了5次
1出现了3次
3出现了2次
出现次数最多的数如下:
[2]
3.2.2再帰
再帰を使用するC ++コードは次のとおりです。
def fun(array):
"""
函数的输出是一个列表,其中的每个元素均为"包含两个元素的"子列表
子列表中,第一个元素为数组array中的某个元素t,第二个元素为元素t在数组array中出现的次数
"""
results=[] #results是最终输出列表
length=len(array)
if length==0:
return results # 若array为空列表,则返回空列表
if length==1:
results.append([array[0],1])
return results # 若array只有一个元素,则该元素出现的次数为1
index=int(length/2)
arr1=array[:index] # 将数组array分为arr1与arr2
arr2=array[index:]
result1=fun(arr1) # 分别得出子数组的输出
result2=fun(arr2)
temp={
} # 字典
for t in result1: # 先处理第一个数组
temp[t[0]]=t[1] # 键为数组中的元素,值为该元素在数组中出现的次数
for i in result2: # 处理第二个数组
if i[0] in temp.keys(): # 若第二个数组中的元素出现在字典中,则将出现次数合并
temp[i[0]]=i[1]+temp[i[0]]
else: # 若第二个数组中的元素未出现在字典中,则新建一个键值对
temp[i[0]]=i[1]
for i in temp.keys(): # 将字典转换为最终输出
results.append([i,temp[i]])
return results
if __name__=='__main__':
inputs=[] # 存储输入的整数
results=[] # 输出的结果
elements=[] # 因为出现次数最多的数可能不唯一,因此构建一个列表用于存储出现次数最多的数集
temp = input("请输入数据,若输入完毕,请输入'q'\n:")
while(temp!='q'):
inputs.append(temp)
temp = input("请输入数据,若输入完毕,请输入'q'\n:")
inputs = [int(i) for i in inputs]
print('您输入的数组长度为'+str(len(inputs))+',如下:')
print(inputs)
results=fun(inputs)
results=sorted(results,key=lambda x:x[1],reverse=True)
for i in results:
print(str(i[0])+'出现了'+str(i[1])+'次')
elements.append(results[0][0]) # 出现次数排在第一的元素
for i in results[1:]: # 出现次数最多的元素可能不止一个,可能有多个
if i[1]==results[0][1]:
elements.append(i[0])
print('出现次数最多的数如下:')
print(elements)
以下は、入力と出力の例です。
请输入数据,若输入完毕,请输入'q'
:2
请输入数据,若输入完毕,请输入'q'
:1
请输入数据,若输入完毕,请输入'q'
:2
请输入数据,若输入完毕,请输入'q'
:2
请输入数据,若输入完毕,请输入'q'
:1
请输入数据,若输入完毕,请输入'q'
:3
请输入数据,若输入完毕,请输入'q'
:2
请输入数据,若输入完毕,请输入'q'
:1
请输入数据,若输入完毕,请输入'q'
:2
请输入数据,若输入完毕,请输入'q'
:3
请输入数据,若输入完毕,请输入'q'
:q
您输入的数组长度为10,如下:
[2, 1, 2, 2, 1, 3, 2, 1, 2, 3]
2出现了5次
1出现了3次
3出现了2次
出现次数最多的数如下:
[2]
終わり