[伯俊]1244スイッチPython


スイッチのオン/オフ


質問する


1から連続番号のスイッチがあります.スイッチはオンまたはオフの状態です.<「図1>8個のスイッチの状態を示しています.」「1」はスイッチがオンになっていることを示し、「0」はオフになっていることを示します.そして何人かの学生を選び、学生たちにスイッチ数以下の自然数を1つ以上分けます.学生たちは自分の性別や受け取った数に応じて、以下のようにスイッチを操作します.
男性はスイッチ番号が自分が受け取った数字の倍数であれば、スイッチの状態を変えます.スイッチが入ったままで、閉まったままで.<図1>に示すように、男子生徒が3を取得すると、その生徒は図2>に示すように、3番、6番のスイッチの状態を変更する.
女性は自分が受け取った数字が同じスイッチを中心に、左右対称で最も多くのスイッチが含まれているセグメントを探して、そのセグメントに属するすべてのスイッチの状態を変えます.このとき区間に属するスイッチ数は常に奇数である.
スイッチ番号①②③⑤√√√√√√√√√√√スイッチ状態01010001
<図1>
例えば、<図2>で女子生徒が3を得た場合、3番スイッチを中心に、2番、4番スイッチの状態は同じ、1番、5番スイッチの状態は同じ、<図3>のように、1番から5番スイッチの状態を全て変える.<図2>で女子が4,3,5番スイッチを得た状態が異なる場合は、4番スイッチの状態だけを変更します.
スイッチ番号①②③⑤√√√√√√√√√スイッチ状態0110101
<図2>
スイッチ番号①②③⑤ㅇ∏〃スイッチ状態1000111
<図3>
スイッチの初期状態、学生ごとの性別、受信数を入力します.学生たちが入力順に、自分の性別や受け取ったスイッチ数でスイッチの状態を変える場合は、スイッチの最後の状態を出力するプログラムを作成してください.

入力


最初の行はスイッチ数を与えます.スイッチ個数は100以下の正の整数です.2行目は、各スイッチの状態を示します.開いて1、閉じて0、真ん中にスペースがあります.3行目は学生数を与える.学生数は100以下の正の整数です.4行目から最後の行まで、各行は学生の性別、学生が受け取った数字を与えます.男子は1、女子は2で、生徒はスイッチ数以下の正の整数を受け取る.学生の性別と人数の間にスペースがあります.

しゅつりょく


スイッチの状態は1番スイッチから、最後のスイッチまで、行ごとに20個出力します.例えば、21番のスイッチがあれば、そのスイッチの状態は2行目の一番前に出力されます.オンのスイッチは1、オフのスイッチは0と表示され、スイッチ状態の間にスペースが配置されます.

解決策

  • 人の男性であれば、forドアを通じて自分の番号を飛び出し、スイッチの状態を変える.
  • 女の人なら、まず自分のスイッチ
  • を変えます.
  • while女性のドアの数字の左右のインデックスがゼロ以上で、スイッチの全長より小さい場合、
  • 程度の相が同時に、値を変更し、
  • くらい違うと止まります.
  • 出力フォーマットに合わせるために、ジャンプごとに40回出力します.
  • 辛いところ

  • の問題は理解していますが、インデックスを作成する過程は混乱しています.
  • PythonはZero Baseでインデックスをよく作成していることを覚えておいてください.
    問題の先頭が1であれば、0番目のインデックスを任意に追加して、数字を簡単に把握できます.
  • #스위치 개수 
    initial = int(input())
    #스위치 배열 
    swi = list(map(int,input().split(' ')))
    #학생수 
    num = int(input())
    #학생수만큼 배열에 넣는다. 
    arr = []
    for _ in range(num): 
    	arr.append(list(map(int, input().split(' '))))
    
    for a in arr :
        if a[0] == 1 :  #남자일 때
            for i in range(a[1]-1,len(swi),a[1]) : #a[1]-1 인덱스부터 끝까지 a[1]배만큼 순회하며 스위치를 변경
                if swi[i] == 1 :
                    swi[i] = 0
                else :
                    swi[i] = 1 
        else : #여자이면 
            j = 0  
            if swi[a[1]-1] == 1 : #해당 스위치를 변경
                swi[a[1]-1] = 0
            else : 
                swi[a[1]-1] = 1
            while  ((a[1]-j-2) >= 0) and ((a[1]+j) < (len(swi))):  #여자가 받은 숫자의 좌우 인덱스가 0보다 크거나 같으면서 스위치의 총 길이보다 작으면
                if swi[(a[1]-j-2)] == swi[(a[1]+j)] : #좌우가 같을 때
                    if swi[(a[1]-j-2)] == 1 : #값 반대로 입력
                        swi[(a[1]-j-2)] = 0 
                        swi[a[1]+j] = 0
                    else :
                        swi[(a[1]-j-2)] = 1
                        swi[a[1]+j] = 1
                    j += 1
                else : #좌우가 다르면 멈추기 
                    break
    
    result = ' '.join(str(s) for s in swi)
    for i in range(0,len(result),40) :
        print(result[i:i+40])