编程练习——杨辉三角的变形

  • 时间限制: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;
}
发布了299 篇原创文章 · 获赞 1219 · 访问量 159万+

猜你喜欢

转载自blog.csdn.net/luckydarcy/article/details/102553409