Baek Junアルゴリズム9461号:波の半数列
6591 ワード
質問リンク
https://www.acmicpc.net/problem/9461
質問する
右図に示すように、三角形は螺旋状に並んでいます.最初の三角形は正の三角形で、辺の長さは1です.次に、次の手順で正三角形を追加します.スパイラル上の最長エッジの長さがkの場合、そのエッジにkの長さの正三角形を追加します.
波数の半数列P(N)は螺旋上の正三角形の辺の長さである.P(1)からP(10)までの最初の10の数字は、1、1、2、2、3、4、5、7、9である.
Nが与えられた場合、P(N)を求めるプログラムを作成してください.
入力
第1行は、試験例の個数Tを与える.各試験例は1行からなり、Nが与えられる.(1 ≤ N ≤ 100)
しゅつりょく
各テストボックスはP(N)を出力する.
入力と出力の例
に答える
宣言入力試験用例の個数tとN(1≦N≦100)
long資料型のdp配列にsizeに等しい空間を割り当てる.
問題ではNの値が1〜9であるため,dp配列に値を格納する.(配列のインデックス値は0から始まるので、0から8に割り当てられます.)
N=1から9までのP(N)値から点火式を求める.
dp[n−1]=dp[n−2]+dp[n−6]が求められる.
ソースコード
#include <stdio.h>
#define size 101
long dp[size];
int main(){
int t = 0;
dp[0] = dp[1] = dp[2] = 1;
dp[3] = dp[4] = 2;
dp[5] = 3;
dp[6] = 4;
dp[7] = 5;
dp[8] = 7;
scanf("%d",&t);
for(int i = 10; i <= size; i++){
dp[i - 1] = dp[i - 2] + dp[i - 6];
}
for(int i = 0; i < t; i++){
int n = 0;
scanf("%d",&n);
printf("%ld\n",dp[n - 1]);
}
return 0;
}
アルゴリズム分類
Reference
この問題について(Baek Junアルゴリズム9461号:波の半数列), 我々は、より多くの情報をここで見つけました https://velog.io/@inwooleeme/백준-알고리즘-9461번-파도반-수열テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol