#54596: 利用標記


qqgouo@gmail.com (寒風)


n = int(input()) f = list(map(int,input().split())) visited = [False] * n groups = 0 for i in range(n): if not visited[i]: groups +=1 cur = i while not visited[cur]: visited[cur] = True cur = f[cur] print(groups)

因為題目要求數字有幾個小群體,所以第一步可以去做:

1 .先把所有格子先標記為False,如果已經尋過那就標示為True

2. 再來找規律

for迴圈利用 i 生成自己的號碼        0 1 2 3 4 5 6 7 8 9 #不會改變

如果朋友的號碼                              9 8 7 6 5 4 3 2 1 0#input()

第一步:看有沒有標記過,如果沒有則加入一個小群體,並記錄下來目前自己的數字

第二步:重複直到結果有被標記住。若無紀錄則標註True,引所數字到自己位置繼續做比較,直到跑完整個n次

 

#54597: Re: 利用標記


qqgouo@gmail.com (寒風)


n = int(input())
f = list(map(int,input().split()))

visited = [False] * n
groups = 0

for i in range(n):
    if not visited[i]:
        groups +=1
        cur = i
        while not visited[cur]:
            visited[cur] = True
            cur = f[cur]
print(groups)            

因為題目要求數字有幾個小群體:

 .先把所有格子先標記為False,如果已經尋過那就標示為True

. 再來找規律

for迴圈利用 i 生成自己的號碼        0 1 2 3 4 5 6 7 8 9 #不會改變

如果朋友的號碼                              9 8 7 6 5 4 3 2 1 0#input()

第一步:看有沒有標記過,如果沒有則加入一個小群體,並記錄下來目前自己的數字

第二步:重複直到結果有被標記住。若無紀錄則標註True,引所數字到自己位置繼續做比較,直到跑完整個n次