楊輝三角的變形【程式設計題】
阿新 • • 發佈:2019-02-06
題目
描述
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;
}