白駿9461号ローブ数列


白骏9461号罗布数列


1.質問


右図に示すように、三角形は螺旋状に並んでいます.最初の三角形は正の三角形で、辺の長さは1です.次に、次の手順で正三角形を追加します.スパイラル上の最長エッジの長さがkの場合、そのエッジにkの長さの正三角形を追加します.
波数の半数列P(N)は螺旋上の正三角形の辺の長さである.P(1)からP(10)までの最初の10の数字は、1、1、2、2、3、4、5、7、9である.
Nが与えられた場合、P(N)を求めるプログラムを作成してください.

2.入力


第1行は、試験例の個数Tを与える.各試験例は1行からなり、Nが与えられる.(1 ≤ N ≤ 100)

3.出力


各テストボックスはP(N)を出力する.

4.解答

  • 流砂フィボナッチ
  • は画像を見ることができて、規則を探すことができて、私は画像を見て規則を探すのが少し速いです.
  • a[n] = a[n-3] + a[n-2]
  • には複数の試験例があり、Nは最大100個であり、事前に100個に格納され、結果のみが出力される.
  • を耳でほぐしておけば、事前にはできていませんが…
  • 5.最初の解答と違う点

  • データ範囲には注意していません.
  • int、Nプラス100、オーバーフローしました.
  • 私のメモリではないのでlonglongと書きました.
  • のPythonでcote bolを作ろうと思った時
  • オーバーフロー時
  • 本書はPythonでgithubでコードをチェックする必要がある場合말고 없다. C++이 더 편해서 좋다. 오버플로우 나면 짜증나지만 데이터 타입 안 쓰면 컴퓨터가 댕청해서 내 말 못 알아 들을 것 같은 불안한 기분이 든다.
  • 6.コード

    #include <iostream>
    using namespace std;
    
    long long d[100];
    
    int main() {
    	int testCase;
    	cin >> testCase;
    	d[0] = 1;
    	d[1] = 1;
    	d[2] = 1;
    
    	for (int i = 3; i < 100; i++) {
    		d[i] = d[i - 2] + d[i - 3];
    	}
    
    	for (int i = 0; i < testCase; i++){
    		int index;
    		cin >> index;
    		cout << d[index - 1] << "\n";
    	}
    	
    }