- 时间限制:1秒
- 空间限制:32768K
描述
1
1 1 1
1 2 3 2 1
1 3 6 7 6 3 1
1 4 10 16 19 16 10 4 1
以上三角形的数阵,第一行只有一个数1,以下每行的每个数,是恰好是它上面的数,左上角数到右上角的数,3 个数之和(如果不存在某个数,认为该数就是0)。
求第 n 行第一个偶数出现的位置。如果没有偶数,则输出 -1。例如输入 3 则输出 2,输入 4 则输出 3。
输入 n (n <= 1000000000)
- 输入描述:输入一个 int 整数
- 输出描述:输出返回的 int 值
- 示例:输入 4,输出 3
分析
这是一个变形的杨辉三角,每一行比前一行多两个数字,每行的每个数等于它上面三个数之和。由于第二层是自然数列,因此前两行除外的奇数行的第二个必定是偶数。仔细分析,有如下规律。
假设需要查询第 n 行:
- 当 n<3 时,没有偶数,输出 -1;
- 当 n 为奇数时,第一个偶数位置在第二,输出 2;
- 当 n 为偶数且能被 4 整除时,第一个偶数位置在第三,输出 3;
- 当 n 为偶数但不能被 4 整除时,偶数位置在第四,输出 4
所以代码很简单!
C代码实现
#include <stdio.h>
int get_even_position(const unsigned int row)
{
if(row < 3) return -1;
if(row % 2) return 2;
if(row % 4 == 0) return 3;
if(row % 4 == 2) return 4;
return -1;
}
int main(void)
{
unsigned int row = 0;
int pos = 0;
printf("杨辉三角的变形,请问您想查询第几行:");
scanf("%u", &row);
if(row > 1000000000) {
printf("超出范围!\n");
return -1;
}
pos = get_even_position(row);
if(pos < 0)
printf("第%u行没有偶数\n", row);
else
printf("第%u行第一个偶数出现的位置是:%d\n", row, pos);
return 0;
}