#24457: c++複雜解答


wallacechu0409@gmail.com (Wallace Chu)

學校 : 國立臺灣師範大學附屬高級中學
編號 : 136430
來源 : [60.250.158.236]
最後登入時間 :
2024-01-30 11:09:01
c291. APCS 2017-0304-2小群體 -- 2017年3月APCS | From: [58.114.189.14] | 發表日期 : 2021-02-19 22:09

#include <iostream>

using namespace std;

 

int main() {

int n;

cin>>n;

int a=1,s,cnt=0,k,z,c=1,bnt=0;

int A[n];

for(int i=0;i<n;i++){

cin>>A[i];

}

for(int i=0;i<n;){

if(c){  //前面設定i為k 只用一次

k=i;

c--;

}

if(A[k]!=-1){

if(a){ //前面設定k為a 只用一次

s=k;  //紀錄第一個朋友

a--;

}

z=k; 

k=A[k]; //將原本A[k]之值變為索引,之後繼續循環

A[z]=-1; //用過就變-1

}

if(s==k){ //如果頭尾相同

cnt++; //多一個群體

a=1; //還原a

for(int j=0;j<n;j++){ //從第一個元素開始找不是-1的值

if(A[j]!=-1){ 

k=j; //設定k為下一個開始尋找的數

break;

}else{

bnt++; //如果是-1 bnt++

}

}

if(bnt==n){

        break; //結束整個迴圈

        }

    bnt=0;//如果沒結束就歸零到時候重新計算

}

}

cout<<cnt;//輸出團體個數

return 0;

}

 
ZeroJudge Forum