第10回州コンテストjavaテスト質問D:数値の分解

数字の分解


[問題の説明] 2019を3つの異なる正の整数の合計に分解し、各正の整数に2と4の数字が含まれていないことを要求します。異なる分解方法はいくつありますか?3つの整数を交換する順序は同じ方法と見なされることに注意してください。たとえば、1000 + 1001 +18と1001+ 1000 +18は同じと見なされます。
方法1の
アイデア:
最初に使用する方法は再帰的アイデアです。最初にタイトルの条件を満たすアイテムをリストに保存し、次に再帰的アイデアを使用して2つのレイヤーをトラバースします。次に2019-sが最初に選択した2つの数値です。 1つは、シンボルが質問の条件を満たしていないかどうかを判断することです。質問に繰り返されないという場合は、繰り返されないように小さいものから大きいものの順に並べます。質問のkパラメータは、繰り返される可能性を制御するために使用されます。
プログラム:

a=[]
for i in range(1,2020):
    if str(i).count("2")==0 and str(i).count("4")==0:
        a.append(i)
con=0
def dfs(m,s,k):
    global con

    if m==2 :
        if a.count(2019-s)==1 and  2019-s>=a[k]:
            con+=1

        return

    for i in range(k,len(a)):
        if s+a[i]>2019 or i+1>=len(a):
            break
        dfs(m+1,s+a[i],i+1)

dfs(0,0,0)

方法2の
アイデア:
この方法は、forステートメントを使用してトラバースすることです。
プログラム:

a=[]
for i in range(1,2020):
    if str(i).count("2")==0 and str(i).count("4")==0:
        a.append(i)
con=0
for i in range(len(a)):
    for i1 in range(i+1,len(a)):
        if i1+1>=len(a):
            break
        if 2019-(a[i]+a[i1])>=a[i1+1] and a.count(2019-(a[i]+a[i1]))==1:
                con+=1
print(con)

転載は禁止されています。自習のみ。プログラムエラーについては責任を負いません。

おすすめ

転載: blog.csdn.net/weixin_46640345/article/details/112958889