Python:入力配列の連続するサブ配列の最大合計/べき乗/配列内で最も頻度の高い要素を見つける


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出现了51出现了33出现了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出现了51出现了33出现了2次
出现次数最多的数如下:
[2]

終わり

おすすめ

転載: blog.csdn.net/qq_40061206/article/details/114741746