• 变形的杨辉三角问题的一种解法


           这个问题也没有用到任何算法思想(可能是本人解这道题时,还太水了吧),而是通过数学观察解的题,解题过程也没有什么可参考、启发的。代码及题目如下:

    package com.wly.algorithmproblem;
    /**
     * 变形的杨辉三角
     * 
    题目详情:
             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)
     * @author wly
     *
     */
    public class SpecialTriangle {
    
    	public static void main(String[] args) {
    		System.out.println(solution(4));
    		
    	}
    	
    
    	/**
    	 * 一、
    	 * 和"数字覆盖"一样,本题的解题方法也主要是数学观察推导,并没有用到多少算法的思想
    	 * 定理:同一行的"开始"位置不可能连续出现四个奇数
    	 * 	  1   t1  t2
    	 * 1  x1  x2  x3
    	 * 设x1,x2,x3都是奇数,则1+t1->奇数,推出t1是奇数,1+t1+t2->奇数,推出t2是偶数,t1+t2->偶数,矛盾。定理得证
    	 * 二、
    	 * 再观察三角形数的分布,每一行的第一个数总是1,第二个数总是n-1,第三个数总是(n-1)+(n-2)+...+2+1
    	 * 因为不可能出现连续4个奇数,所以第四个数就没有求的意义了。另外关于第三个数的值,也是可以证明的,这里就不做详细介绍了,感兴趣的朋友可以试试。
     	 * @param x
    	 */
    	public static int solution(int x) {
    		//输入不合法
    		if(x <= 0) {
    			return -1;
    		}
    		
    		if(x <= 2) {
    			return -1;
    		}
    		
    		//判断第二行数字是否是偶数
    		if((x -1) % 2 == 0) {
    //			return n-1;
    			return 2;
    		}
    		
    		//判断第三个数,WOW!!这里是不是一个陷阱,大数求和的和值奇偶性快速判断,不过还好注意到了
    		//使用等差数列求和公式:(n+1)n/2,注意int类型的数值越界!!!
    		x = x -1;
    		int temp = x % 2;
    		if(temp == 0) {
    			//拿到n+1的个位数和n的个位数,再将两个个位数相乘即可,根据结果判断奇偶性即可
    			if((((x / 2)% 10) * ((x+1) %10)) % 2 == 0) {
    				return 3;
    			} else {
    				return 4;
    			}
    		} else {
    			if(((((x+1) / 2)% 10) * ((x) %10)) % 2 == 0) {
    				return 3;
    			} else {
    				return 4;
    			}
    		}
    	}
    }
    

           运行结果:

    3
    

           O啦~~~

           转载请保留出处:http://blog.csdn.net/u011638883/article/details/17369543

           谢谢!!

  • 相关阅读:
    pytorch获取模型某一层参数名及参数值方式
    PyTorch源码解读之torchvision.models
    torch.nn.Conv2d()函数详解
    UCF101
    ipynb格式转换
    linux下的压缩与解压缩
    tomcat 部署的项目图片名字带中文
    恢复oracle误删除数据
    项目中遇到的分布式高并发情况及解决方案
    poi 导出复杂表头 execl
  • 原文地址:https://www.cnblogs.com/fuhaots2009/p/3478635.html
Copyright © 2020-2023  润新知