1. 程式人生 > >CUST OJ -76- 爐石傳說真尼瑪好玩

CUST OJ -76- 爐石傳說真尼瑪好玩

1.題目

  • 描述 “爐石傳說”是一款快樂的卡牌類遊戲,其中有一張牌為“褻瀆”,其效果 如下: 對敵方隨從全部造成1點傷害,如果有隨從死亡,則重複此效果–即再次對敵方所有隨從造成1點傷害, 直到重複某次效果後敵方沒有隨從死亡/敵方全部隨從死亡為止. 例:敵方有三個隨從,生命值分別為1,2,3。則使用“褻瀆”牌後敵方隨從會全部死亡。 如果敵方隨從在使用“褻瀆”牌後全部死亡,lzp會非常的快樂。 現給出敵方隨從的數量,以及他們的生命值,問lzp打完“褻瀆”牌後是否會快樂。 如果lzp快樂,則輸出“YES”,否則則輸出“NO”
  • 輸入 多組輸入,每組第一行輸入一個數n(1<=n<=10),代表敵方隨從的數量, 第二行輸入n個數,a1,a2…an,(1<=ai<=10)代表n個隨從的生命值。
  • 輸出 每組輸出一行,每行輸入一個單詞“YES”或“NO”(輸出不包含引號), YES表示lzp會感到快樂,NO表示lzp不會快樂。
  • 輸入樣例 5 1 2 3 4 5 5 1 2 3 3 2 5 1 1 3 4 5
  • 輸出樣例 YES YES NO

2. 理解

  • 用了函式遞迴來解決

3.code

  #include<iostream>
  using namespace std;
  int main(){
      int n;
      while(cin >> n){
          int a[n];
          bool ifis = true
; for(int i = 0; i < n; i++){ cin >> a[i]; a[i]--; } int *f(int x[], int y, int z); int *b; b = f(a, n, n); for(int i = 0; i < n; i++){ if(b[i] > 0){ ifis = false; break
; } } if(ifis) cout << "YES" << endl; else cout << "NO" << endl; } } int *f(int x[], int y, int z){ y--; if(y == 0){ return x; } bool ifis2 = false; for(int i = 0; i < z; i++){ if(x[i] == 0){ ifis2 = true; break; } } if(ifis2 == true){ for(int i = 0; i < z; i++){ x[i]--; } f(x, y, z); }else{ return x; } }