#33842: C++ 使用遞迴


kk20180820@gmail.com (Wayne Yang)

學校 : 國立鳳山高級中學
編號 : 172018
來源 : [49.159.254.231]
最後登入時間 :
2024-03-16 17:31:07
f928. 連環炸彈.................Boom! | From: [49.159.254.231] | 發表日期 : 2023-02-06 23:55

//使用函式編寫爆炸規則

#include<iostream>
using namespace std;


void boom(int a[], int m, int n){

    if(m<n && m>=0){


        if(a[m] == 1){

            a[m] = 0;

        }else if(a[m] == 2 ){

            a[m] = 0;

            boom(a,m+1,n);
            boom(a,m-1,n);

        }else if(a[m]!= 0){

            int t=a[m];
            a[m] = 0;            //注意!!!!!!!!!!如果這邊不先將a[m]設成0就進入boom函式,就會出現無限迴圈!!!
            boom(a,m+t,n);
            boom(a,m+t*2,n);
            boom(a,m-t,n);
            boom(a,m-t*2,n);

/*

無限迴圈舉例:

6

1 2 3 1 1 3

1

 

該測資中的兩個3如果沒有先歸零

就會一直在兩個3的連鎖引爆中爆來爆去

*/

        }else{

            a[m] = 0;
        }


    }

}

 

int main(void){

    int n,m;
    cin>>n;

    int a[100005]={ };
    for(int k=0;k<n;k++)
    {
        cin>>a[k];
    }

    cin>>m;

    boom(a,m,n);


    for(int k=0;k<n;k++)
    {
        cout<<a[k]<<" ";
    }
    cout<<endl;


    return 0;
}

 
ZeroJudge Forum