数组经典题之杨辉三角变形
生活随笔
收集整理的這篇文章主要介紹了
数组经典题之杨辉三角变形
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
題目
楊輝三角變形
解決
可以把題目給的圖變形成一個容易理解的三角形
可以看出每一個數(shù)都是上面的三個數(shù)的和。
我們可以將原圖補全為一個完整的矩形,每一行的元素個數(shù)的都是2×行標-1。
因此我們可以搞出一個矩形,首先所有為止都填充為0,然后依次按照列賦值,其中每一行的第一列和最后一列的值為1,每一行的第二列和倒數(shù)第二列需要特殊處理,因為他們不夠上一行的數(shù)不夠三個,直接復制會越界。
解決
#include <iostream> #include <vector> using namespace std;int find_index(int n) {int m=2*n-1;//長為m,寬為n的矩形vector<vector<int>> vv(n,vector<int>(m,0));vv[0][0]=1;for(int i=1;i<n;i++)//按行{vv[i][0]=vv[i][2*i]=1;//每一行的第一個元素和最后一個元素是1for(int j=1;j<2*i;j++)//按列賦值{if(j==1)//第二列特殊處理vv[i][j]=vv[i-1][j]+vv[i-1][j-1];else if(j==2*i-1)//倒數(shù)第二列特殊處理vv[i][j]=vv[i-1][j-1]+vv[i-1][j-2];else//正常情況vv[i][j]=vv[i-1][j-2]+vv[i-1][j-1]+vv[i-1][j];}}for(int k=0;k<m;k++)//查找第n行第一個出現(xiàn)的偶數(shù)的下標{if(vv[n-1][k]%2==0){return k+1;}}return -1;}int main() {int n,index;while(cin>>n){index=find_index(n);cout<<index<<endl;}}這道題關鍵就在于對于下標的精確把握,稍有不注意就會做錯
總結
以上是生活随笔為你收集整理的数组经典题之杨辉三角变形的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: #include NOIP2009 Ju
- 下一篇: 字符串的全排列