【十二题解】 | #杨辉三角的变形#
杨辉三角的变形
http://www.nowcoder.com/practice/8ef655edf42d4e08b44be4d777edbf43
用动态规划写完了发现是找规律的题,还是把代码发上来把,顺带问一句,如果用动态规划的话这道题是不是不能用一维数组
#include<stdio.h>
int main(){
int number;
while( scanf("%d", &number) != EOF){
int all = number*2-1;
int **dp = (int*)malloc(sizeof(int*)*number);
for(int i=0; i<number; i++){
dp[i] = (int*)malloc(sizeof(int)*all);
memset(dp[i], 0, all*sizeof(int));
}
dp[0][all/2]=1;
for(int i =1; i<number; i++){
for(int j = 0; j<all; j++){
if(j==0){
dp[i][j]=dp[i-1][j]+dp[i-1][j+1];
}
else if(j==all-1){
dp[i][j]=dp[i-1][j-1]+dp[i-1][j];
}
else{
dp[i][j]=dp[i-1][j-1]+dp[i-1][j]+dp[i-1][j+1];
}
}
}
int sign = 0;
for(int i=0; i<all; i++){
if(dp[number-1][i]%2==0){
printf("%d\n", i+1);
sign = 1;
break;
}
}
if(sign==0)printf("-1\n");
}
} int main(){
int number;
while( scanf("%d", &number) != EOF){
if(number<=2){
printf("-1\n");
}
else{
int x = (number-3)%4;
switch(x){
case 0:printf("2\n");
break;
case 1:printf("3\n");
break;
case 2:printf("2\n");
break;
case 3:printf("4\n");
break;
}
}
}
}