1. 程式人生 > >楊輝三角的變形【程式設計題】

楊輝三角的變形【程式設計題】

題目

描述

          1
       1  1  1
    1  2  3  2  1
  1 3  6  7  6  3  1
1 4 10 16 19 16 10  4  1

以上三角形的數陣,第一行只有一個數1,以下每行的每個數,是恰好是它上面的數,左上角數到右上角的數,3個數之和(如果不存在某個數,認為該數就是0)。
求第n行第一個偶數出現的位置。如果沒有偶數,則輸出-1。例如輸入3,則輸出2,輸入4則輸出3。

輸入

輸入一個int整數

輸出

輸出返回的int值

樣例輸入

4

樣例輸出

3

程式碼

這題毫無思路。。。看過大神的程式碼。。。我可以膜拜一下了
這題用遞迴寫的真是太讚了~

#include <iostream>
using namespace std;
int C(int n,int k)
{
    if(k==1 || k==n*2-1)
        return 1;
    if (k<1 ||k>n*2-1)
        return 0;
    else
        return C(n-1,k-2)+C(n-1,k-1)+C(n-1,k);
}
int main()
{
    int N;
    cin>>N;
    for
(int j=1; j<=2*N-1; j++) { if(C(N,j)%2==0) { cout<<j<<endl; break; } else if(j==2*N-1) cout<<"-1"<<endl; } }

第二個程式碼。。。
大神用棧的思想一層一層來求。。。膜拜

#include <iostream>
#include <vector>
#include <string>
#include <set> #include <algorithm> using namespace std; int main() { vector<int> current,next; int n; cin>>n; n--;//第一行沒有偶數 current.push_back(1);//最左邊的1 while(n--) { next.push_back(1); if(current.size()==1)//第二行 { next.push_back(1); } else//中間的數 { for(unsigned int i=0; i<current.size(); i++) { if(i==0) { next.push_back(current[i]+current[i+1]); } else if(i<=current.size()-2) { next.push_back(current[i]+current[i-1]+current[i+1]); } else { next.push_back(current[i]+current[i-1]); } } } next.push_back(1);//最右邊的1 current.clear(); current=next; next.clear(); } unsigned int i; for(i=0; i<current.size(); i++) { if(current[i]%2==0) { cout<<i+1<<endl; break; } } if(i==current.size()) { cout<<-1<<endl; } return 0; }

這裡寫圖片描述