閱讀99 返回首頁    go 技術社區[雲棲]


龐果網之楊輝三角的變形

題目詳情

         1

     1   1  1

  1  2   3  2  1

1  3  6   7  6  3  1

以上三角形的數陣,第一行隻有一個數1, 以下每行的每個數,是恰好是它上麵的數,左上的數和右上數等3個數之和(如果不存在某個數,認為該數就是0)。

求第n行第一個偶數出現的位置。如果沒有偶數,則輸出-1。例如輸入3,則輸出2,輸入4則輸出3。

輸入n(n <= 1000000000)


【解析】


經過分析得出的結論如下:

1.前兩行沒有偶數可直接返回-1

2.一下每四行一個周期,2,3,2,4進行變換。

3.假設當前行為n,n%4 = 0 偶數位置為 3

  n%4 = 1 偶數位置為 2

  n%4 = 2 偶數位置為 4

  n%4 = 3 偶數位置為 2

【代碼】

/*********************************
*   日期:2013-11-24
*   作者:SJF0115
*   題號: 楊輝三角的變形
*   來源:https://hero.pongo.cn/Question/Details?ID=141&ExamID=139
*   結果:AC
*   來源:龐果網
*   總結:
**********************************/
#include <iostream>
#include <stdio.h>
#include <malloc.h>
#include <string.h>
using namespace std;

int run(int n){
    //前兩行直接返回-1
    if(n <= 2){
        return -1;
    }
    else{
        int index = n % 4;
        if(index == 1 || index == 3){
            return 2;
        }
        else if(index == 0){
            return 3;
        }
        else if(index == 2){
            return 4;
        }
    }
}

int main() {
    int n;
    while(scanf("%d",&n) != EOF){
        printf("%d\n",run(n));
    }//while
    return 0;
}


【解法2】(轉載)

這是道找規律題,不可能通過計算每層的數據來求,規律如下:

(1)第n層有2n-1個數,且關於第n個數對稱;

(2)有第(1)得每行的中間數為奇數(x+x+奇數=奇數);

(3)前兩行沒有偶數,返回-1

感覺上麵3條規律沒啥用~

(4)每行的第1個數是1,每行的第2個數等於n-1(通過0+1+前一行的第二個數得到)

通過(4)我們就解決了奇數行的第一個偶數位置,為2

(5)這條規律主要是解決偶數行的問題,這條規律我不是看出來的,是多寫了幾層發現的,然後歸納證明了下:

     現在將奇數寫作1,偶數寫作0,x代表省略不考慮,不影響計算結果的奇偶性

     第4行數據:        1 1 0 1 x  --第一個偶數出現的位置是3

     第5行....:      1 0 0 0 x  

     第6行....:    1 1 1 0 x    --第一個偶數出現的位置是4

     第7行....:  1 0 1 0 x    

     第8行....:1 1 0 1 x    --第一個偶數出現的位置是3 

     同時前4個數據的奇偶狀態又回到了第4行,而且每行前4個數據的計算隻跟上行的前4個數據有關。

     到此偶數行的問題也解決了,下麵是代碼,已通過pongo的測試:


#include <stdio.h>
#include <iostream>
#include <string>
using namespace std;
class Test {
public:
    static int run (int   x)
    {
        int res=-1;
		if(x<=2) res=-1;
		else if(1==x%2)
			 res=2;
		else res=3+(x-4)/2%2;
		return res;
    }
};
//start 提示:自動閱卷起始唯一標識,請勿刪除或增加。
int main()
{   
    
	cout<<Test::run(42)<<endl;   
} 
//end //提示:自動閱卷結束唯一標識,請勿刪除或增加。



最後更新:2017-04-03 14:54:25

  上一篇:go 龐果網之尋找直方圖中麵積最大的矩形
  下一篇:go 項目管理9大管理過程知識點精華