ブルーブリッジカップソフトウェアコンペティション-Pythonでの一般的な操作の例

アルゴリズムの教科書:「高度なアルゴリズムの競争の紹介」清華大学出版社
オンラインショッピング:Jingdong Dangdang   著者の署名帳(請求書付き):クリックして
ください提案があれば、QQグループを追加してください:567554289


  ブルーブリッジカップPythonグループのコンテストに参加することで、初心者の一般的な問題は、入力と出力の処理に関する疑問、および一般的に使用される並べ替えとキューの不慣れです。この記事では、関連する操作を要約します。

1.forループ

  例1: i i iの範囲は4〜(20190325-1)

for i in range(4,20190325):

  参考:https://blog.csdn.net/weixin_43914593/article/details/112979520
  
  例2: i i iの範囲は0〜(len(num)-1)です

for i in range(len(num)):

  参照:https ://blog.csdn.net/weixin_43914593/article/details/112560449

2. sort()およびsorted()関数

  sort()は、配列をソートします。次に例を示します。

n, s = map(int,input().split())
a = list(map(int,input().split()))
a.sort()

  参照:https ://blog.csdn.net/weixin_43914593/article/details/112930544

  sorted()は、構造をソートします。次に例を示します。

a = sorted(a, key=lambda a: a[0])

  参照:https ://blog.csdn.net/weixin_43914593/article/details/112979653

3.キュー

  例:

from queue import *
q = Queue()              
q.put((x,y))    #用队列直接处理结构体
q.empty():            
q.get() 

  参照:https ://blog.csdn.net/weixin_43914593/article/details/112851771

4.配列の割り当て

  例1:1次元配列を0に割り当てます

flag = [0 for i in range(n+1)]

  参照:https ://blog.csdn.net/weixin_43914593/article/details/112979653

  例2:2次元配列を0に割り当てます

r = [[0] * 3 for i in range(k)]

  参照:https ://blog.csdn.net/weixin_43914593/article/details/112909051

  例3:S[i]をiに割り当てる

N=1000002
s=[]   
for i in range(N):  
    s.append(i)

  参照:https ://blog.csdn.net/weixin_43914593/article/details/112979670

5.入力

5.11行に複数の整数を入力する

  例1:最初の行には整数Nが含まれ、2番目の行にはN個の整数が含まれます

n = int(input())
a = input().split(" ")
int(a[i])     #使用时要转换

#或者这样写:
a=[int(i) for i in input().split()]

  参照:https ://blog.csdn.net/weixin_43914593/article/details/112979634

  例2:複数の整数の行を入力します

num=[int(i) for i in input().split()]

  参照:https ://blog.csdn.net/weixin_43914593/article/details/112560449

5.22次元配列の入力

  例:最初の行には3つの整数N、M、およびTが含まれ、次のM行のそれぞれには2つの整数tsおよびidが含まれます。

first = input()
n, m, T = [int(i) for i in first.split()]

a = []       #这是二维数组
for i in range(m):
    a.append([int(i) for i in input().split()])

  参照:https ://blog.csdn.net/weixin_43914593/article/details/112979653

5.3空白以外の文字で区切って数字を入力する

  例:
  入力の最初の行は、入力データグループの数を表す正の整数Tです。
  データの各セットには2つの行が含まれ、最初の行は往路の離着陸時刻であり、2番目の行は復路の離着陸時刻です。
  離陸および着陸時間の形式は次のとおり
  です。h1:m1:s1 h2:m2:s2
  h1:m1:s1 h3:m3:s3(+1)
  h1:m1:s1 h4:m4:s4(+2)

def get_time():
     line = str(input()).split(' ')   #一行字符串,以空格分开,分别读取     
     h1=int(line[0][0:2])     #处理字符串中的数字
     m1=int(line[0][3:5])
     s1=int(line[0][6:8])
     
     h2=int(line[1][0:2])
     m2=int(line[1][3:5])
     s2=int(line[1][6:8])

     day = 0 
     if(len(line)==3):    #line中有3个元素,最后一个是day
          day = int(line[2][2])

     S = h1*3600 + m1*60 + s1
     E = h2*3600 + m2*60 + s2
     return E - S + day*24*3600
 
n = int(input())
for i in range(n):
    ans = (get_time()+ get_time())/2
    hh = int(ans/3600)
    mm = int(ans/60%60)
    ss = int(ans%60)
    print("{:0>2d}:{:0>2d}:{:0>2d}".format(hh,mm,ss))

  参照:https ://blog.csdn.net/weixin_43914593/article/details/112728088

5.4マップで複数の数字を入力する

  例1:
  最初の行には4つの正の整数A、B、C、m
  が含まれ、2番目の行にはA×B×Cの整数が含まれます。ここで((i − 1)×B +(j − 1))×C +(k − 1)+1の数はd(i、j、k)です
  。3行目からm + 2行目では、行(t − 2)に7つの正の整数lat、rat、lbt、rbt、lct、rct、htが含まれています。

A,B,C,m = map(int,input().split())

ship=[]
for i in range(A):
    sublist=[]
    for j in range(B):
        sublist.append([0]*C)
    ship.append(sublist)
    
life=list(map(int,input().split()))

  参照:https ://blog.csdn.net/weixin_43914593/article/details/112761182

  例2:最初の行には2つの正の整数n、Kが含まれています。2行目には、指定されたn個の数値を表すn個の正の整数が含まれています。

n, k = map(int,input().split())
a = input().split()

  参照:https ://blog.csdn.net/weixin_43914593/article/details/112909051

  例3:最初の行には2つの整数n、Sが含まれ、2番目の行にはn個の非負の整数a1、…、anが含まれます。

n, s = map(int,input().split())
a = list(map(int,input().split()))

  参照:https ://blog.csdn.net/weixin_43914593/article/details/112930544

5.5文字の入力

  例:「x()|」で構成される文字列を入力します。

s = input()
if s[pos] == '(':
elif s[pos] == 'x':

  参照:https ://blog.csdn.net/weixin_43914593/article/details/112363933

5.6改行入力

  例1:
  最初の行には整数Nが含まれています。(1 <= N <= 100)
  次のN行のそれぞれには、整数Aiが含まれています。(1 <= Ai <= 100)

n=int(input())
numlist=[]
for i in range(n):
    numlist.append(int(input()))

  参照:https ://blog.csdn.net/weixin_43914593/article/details/112405425

  例2:
  最初の行には2つの整数NとKが含まれています。(1 <= N、K <= 100000)
  次のN行のそれぞれには、2つの整数HiとWiが含まれています。(1 <=こんにちは、Wi <= 100000)

n,k = map(int,input().split())
w = []
h = []
for i in range(n):
    a,b = map(int,input().split())
    w.append(a)
    h.append(b)

  参照:https ://blog.csdn.net/weixin_43914593/article/details/112424722

5.7終了を指定しない入力

  「テストデータのセットが複数あり、テストデータの各行に正の整数n(1 <= n <= 10000)が含まれている」など、入力がいつ終了するかがタイトルで指定されていない場合があります。
  解決策:sysのnの場合.stdin

import sys
for n in sys.stdin:   
    n = int(n)
    n1 = int(n**0.5)
    s = 0
    for a in range(1, n1+1):
        for b in range(a, n1+1):
            if n - a**2 - 2*(b**2) >= 0:
                c = int(pow((n - a**2 - b**2 ), 0.5))
                if a**2 + b**2 + c**2 == n:
                    s = 1
                    print("{} {} {}".format(a, b, c))
 
    if s == 0:
        print("No Solution")

  参照: http: //oj.ecustacm.cn/problem.php
?id=1250   この質問のc++コードは次のとおりです。

#include <iostream>
#include <cmath> 
using namespace std;
bool flag;
int main(){
    
    
    int n;
    while(cin>>n){
    
    
     int m = sqrt(n)+1;
     for(int i=1;i<=m;i++){
    
    
        for(int j=i;j<=m;j++){
    
    
            for(int k=j;k<=m;k++){
    
    
                if(i*i+j*j+k*k==n){
    
    
                    flag=true;
                    cout<<i<<' '<<j<<' '<<k<<endl;
                }
            }
        }
     }
     if(!flag){
    
    
        cout<<"No Solution"<<endl;
     }
     flag=false;
   }
   return 0;
}

6.フォーマットされた出力

  例1:出力は小数点以下4桁に丸められます。

print('{:.4f}'.format(sqrt(sum/(n))))

  参照:https
  
://blog.csdn.net/weixin_43914593/article/details/112930544   例2:
  データの各セットについて、時間の行hh:mm:ssを出力し、飛行時間がhh時間mm分ssであることを示します。秒。
  時刻が1桁の数字の場合、先行ゼロが埋め込まれることに注意してください。たとえば、3時間4分5秒は03:04:05と書く必要があります。

print("{:0>2d}:{:0>2d}:{:0>2d}".format(hh,mm,ss))

  参照:https ://blog.csdn.net/weixin_43914593/article/details/112728088

おすすめ

転載: blog.csdn.net/weixin_43914593/article/details/115022186