杨辉三角的变形【解】--英雄会

今天看到一个有趣的题目:
            1      
        1  1  1  
    1  2  3  2  1
1  3  6  7  6  3 1


以上三角形的数阵,第一行只有一个数1, 以下每行的每个数,是恰好是它上面的数,左上的数和右上数等3个数之和(如果不存在某个数,认为该数就是0)。
求第n行第一个偶数出现的位置。如果没有偶数,则输出-1。例如输入3,则输出2,输入4则输出3。 输入n(n <= 1000000000)
看了题目,我就想模拟一下,可是一看n <= 1000000000;这就没有模拟的必要了,没那么多的空间啊...
最后,习惯性的用笔画了画,首先,左右对称是肯定的,又因为左上的数和右上数等3个数之和,所以,中间持续是奇数;
然后前两行明显都是奇数,所以返回0


再看第二列以后的数据
1 2 3 4 5 6...所以,后面的奇数行的第二位都是偶数;
而后面的偶数行的数据是在第二位以后的(接下来才是重点):

                             1      
                 1    1  1  
            1   2    3  2  1
       1   3   6    7  6  3  1 

   1  4  10 16  19

1 5 15 30 .....

再看每一行的第三个数据,1 3 6 10 15...这些都是1  1+2 1+2+3 1+2+3+4 1+2+3+4+5...递增相加,所以它的奇偶也是逐渐变化的,所以在偶数行中,第4  8  12 ...行的第三位都是偶数;而第6 10 14...也的第四位成功的因为前面一行的偶数成为了偶数;<暂时找不到好的规律的说,不过可以参考一下下面>

好吧,从第一行开始向下看,从左往右看四个数据,到中间为止(够四个的就看过来)

1                           奇

2                       奇奇

3                    奇偶奇

4                奇奇偶奇

5            奇偶偶偶

6        奇奇奇偶

7    奇偶奇偶

8奇奇偶奇

前面两行我就不说了,3 5 7 行也都是很明显的,第二位是偶数

由第4行到第7行,分别是奇奇偶奇    奇偶偶偶    奇奇奇偶     奇偶奇偶,而在第8行,又和第4行一样了奇奇偶奇,所以,后面的行前面4个数据也会按照这个规律下去;

好的,祭出代码:

#include <stdio.h>
#include <stdlib.h>

int run(int x)
{
    if(x <= 2) //前两行直接返回0
    {
        return 0;
    }
    else if(x % 2 == 1)  //奇数行第一个出现偶数为2
    {
        return 2;
    }
    else if(x % 4 == 0)  // 4  8  12...在第三位
    {
        return 3;
    }
    else
        return 4;

}

int main()
{
    printf("%d", run(12));
    return 0;
}

 

各位有清晰的请赐教,多谢...

不了解的也欢迎提出

 

欢迎各位大神指点,o(∩_∩)o
 

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值