蘭橋杯-第6回蘭橋杯 C言語グループA/グループB/グループC-Python問題解決

目次

方程式の整数解

銀河爆弾

素晴らしい数字

カードの種類の数

ブレスレットスタイル

飲み物の引き換え

宝くじの枚数

三陽仙瑞

足し算が掛け算になる

色の交互の行

立方体尾部は変化なし


方程式の整数解

式: a^2 + b^2 + c^2 = 1000

この方程式には整数解がありますか? a、b、c = 6、8、30 があり、これは解のセットです。

別の適切なソリューションを見つけられますか?

解決策に最小の数字を入力してください。

注: 送信する内容は整数である必要があり、余分なコンテンツや説明テキストを入力しないでください。

flag=False
for i in range(1,101):
    for j in range(1,101):
        for k in range(1,101):
            if i*i+j*j+k*k==1000 and i!=6 and j!=8 and k!=30:
                print(i,j,k)
                flag=True
                break
        if flag:
            break
    if flag:
        break

銀河爆弾

銀河Xの広大な空間には、星Xの人工の「爆弾」が多数浮遊しており、宇宙の道路標識として使われている。

各爆弾は、爆発するまでの日数を設定できます。

たとえば、アルファ爆弾が 2015 年 1 月 1 日に設置され、タイマーが 15 日の場合、2015 年 1 月 16 日に爆発します。

2014 年 11 月 9 日に設置されたベータ爆弾があります。タイマーは 1000 日です。爆発の正確な日付を計算してください。

日付はyyyy-mm-ddの形式で年4桁、月2桁、日2桁で入力してください。例: 2015-02-19

フォーマットに従って厳密に記述してください。それ以外の単語や記号は使用できません。

#月份日期表
month_days=[[0,31,28,31,30,31,30,31,31,30,31,30,31],[0,31,29,31,30,31,30,31,31,30,31,30,31]]
#判断闰年
def isLeap(year):
    if year%4==0 and year%100!=0 or year%400==0:
        return True
    else:
        return False
year=2014
month=11
day=9
#模拟爆炸过程
i=1
while i<=1000:
    day+=1
    #超过当月最大天数
    if day>month_days[1 if isLeap(year) else 0][month]:
        day=1
        month+=1
        if month>12:
            month=1
            year+=1
    i+=1
print('{}-{:0>2d}-{:0>2d}'.format(year,month,day))

 

素晴らしい数字

シャオミンは素晴らしい数字を発見しました。その正方形と立方体は、0 から 9 までの 10 個の数字をそれぞれ 1 回だけ正確に使用します。

この数字は何かわかりますか?

余計な内容は記入せずに番号を入力してください。

#判断平方数字和立方数字是否正好用了从0-9
def juage(x,y):
    flag=True
    number_list=[]
    x=str(x)
    y=str(y)
    for i in x:
        number_list.append(i)
    for i in y:
        number_list.append(i)
    number_list.sort()
    for i in range(10):
        if int(number_list[i])!=i:
            flag=False
            break
    return flag
for i in range(1,10*10):
    if juage(i*i,i*i*i):
        print(i)
        break

カードの種類の数

シャオミンはXカジノに拉致され、他の3人でトランプをするよう強制された。

トランプのデッキ(トランプを除く合計 52 枚)が 13 枚ずつ 4 人に均等に配られます。

この時、シャオミンの心に突然次のような疑問が浮かびました。

スートを考慮せずにポイントのみを考慮し、取得するカードの順序を考慮しない場合、手札にある最初のカードの種類の組み合わせは何通りありますか?

余分な内容や説明テキストを入力せずに、整数を入力してください。

#组合数学
sum=1
number=52
#模拟发牌
for i in range(1,14):
    sum*=number
    number-=1
print(sum)

 

ブレスレットスタイル

シャオミンは、赤いサンゴを 3 つ、白いサンゴを 4 つ、黄色の瑪瑙を 5 つ持っています。

彼はそれらを繋いでガールフレンドのブレスレットにしたいと考えていました。

さて、Xiao Ming は次のことを知りたいと考えています。ブレスレットを自由に回転または反転できると考えると、異なる組み合わせは何通りありますか?

この整数を送信してください。冗長な内容や説明文は入力しないでください。

组合数学,圆周排列,+去重

飲み物の引き換え

楽陽陽飲料工場はプロモーションイベントを開催しています。 LeYangYang C タイプ ドリンクは、ボトル キャップ 3 個で別の C タイプ ドリンクと交換でき、サイクルを継続できます (ただし、一時的なローンやクレジットは許可されません)。

シャオミンがペットボトルのキャップを無駄にせず、できるだけ活動に参加した場合、最初に買った飲み物のn本に対して、最終的に合計何本の飲み物が飲めるか計算してください。

入力: 購入を開始する飲み物の数を示す整数 n (0

出力: 実際に受け取った飲み物の数を表す整数

例えば:

ユーザー入力:

100

プログラムは次のように出力するはずです。

149

ユーザー入力:

101

プログラムは次のように出力するはずです。

151

n=int(input())
sum=n
while n>0:
    #如果饮料足够换购
    if n>=3:
        n-=3
        n+=1
        sum+=1
    else:
        break
print(sum)

 

宝くじの枚数

数字について非常に迷信深い人もいます。たとえば、「4」が含まれる数字は「死」という言葉に聞こえるため、不吉だと考えられています。

これらの主張はまったくナンセンスですが、時には大衆のニーズに応えなければならないこともあります。ある宝くじの番号は5桁(10000~99999)で、その中に「4」が含まれない番号が必要となりますので、発行可能な宝くじがある場合の最大発行枚数を計算してください。 2 枚の宝くじには同じ番号はありません。

冗長なテキストや説明的なテキストを含めずに、この番号 (整数) を送信してください。

def juage(n):
    n=str(n)
    flag=False
    if '4' in n:
        flag=True
        return flag
    return flag
ans=0
for i in range(10000,100000):
    if not juage(i):
        ans+=1
print(ans)

 

三陽仙瑞

次の加算式に注目してください。

縁起が良く、繁栄する

+ 3匹の羊が縁起物をプレゼント

-------------------

3匹の羊が怒っている

その中で、同じ漢字は同じ数字を表し、異なる漢字は異なる数字を表します。

「Three Sheep Xian Rui」で表される 4 桁の数字 (答えはユニークです) を記入し、余分な内容は記入しないでください。

#   a0 a1 a2 a3
#+  a4 a5 a6 a7
#-------------
#a4 a5 a2 a1 a8
#全排列0-9找到合适解
number_list=[]
for i in range(10):
    number_list.append(i)
from itertools import permutations
for item in permutations(number_list):
    if item[0]==0 or item[4]==0:
        continue
    x=item[0]*1000+item[1]*100+item[2]*10+item[3]
    y=item[4]*1000+item[5]*100+item[6]*10+item[7]
    z=item[4]*10000+item[5]*1000+item[2]*100+item[1]*10+item[8]
    if x+y==z:
        print(y)
        break

 

足し算が掛け算になる

誰もが知っています: 1+2+3+ ... + 49 = 1225

次に、結果が 2015 になるように、隣接しない 2 つのプラス記号を乗算記号に変換するように求められます。

例えば:

1+2+3+...+10*11+12+...+27*28+29+...+49 = 2015

それが要件を満たす答えです。

別の可能な答えを探して、最初の掛け算記号の左側にある数字を送信してください (たとえば、10 を送信します)。

注: 整数を送信する必要があります。重複する内容は入力しないでください。

#前后两式子相减,消去同类项
diff_number=2015-1225
flag=False
for i in range(1,47):
    for j in range(1,48):
        if i*(i+1)+j*(j+1)-(i+i+1)-(j+j+1)==diff_number:
            if i!=10:
                print(i)
                flag=True
                break
    if flag:
        break

 

色の交互の行

Excel の表には多くのグリッドがあり、特定の行のデータが隣接する行と混同されないようにするために、行ごとに色を変更するスタイルを使用できます。

Xiao Ming がデザインしたスタイルは、1 行目は青、2 行目は白、3 行目は青、4 行目は白です。

Xiao Ming は、21 行目から 50 行目までに青い線が何本含まれているかを知りたいと考えています。

この整数を直接送信し、重複する内容を入力しないでください。

ans=0
for i in range(21,51):
    if i%2!=0:
        ans+=1
print(ans)

 

立方体尾部は変化なし

立方体の末尾が数字そのものである数字がいくつかあります。

例: 1、4、5、6、9、24、25、...

10,000 以内の数値 (数値の 3 乗値ではなく数値を指します) の中で、この特性を満たす正の整数がいくつあるか計算してください。

この整数を送信し、余分な内容を入力しないでください。

def juage(n):
    square_number=n*n*n
    square_number=str(square_number)
    n=str(n)
    length=len(n)
    flag=False
    if square_number[len(square_number)-length:]==n:
        flag=True
        return flag
    return flag
ans=0
for i in range(1,10001):
    if juage(i):
        ans+=1
print(ans)

おすすめ

転載: blog.csdn.net/Talantfuck/article/details/124567133