华为OJ平台——杨辉三角的变形



 1 import java.util.Scanner;
 2
 3 /**
 4  * 杨辉三角的变形
 5  *第一行为1,后面每一行的一个数是其左上角到右上角的数的和,没有的
 6  *记为0
 7  *                        1
 8  *                    1    1    1
 9  *                1    2    3    2    1
10  *            1    3    6    7    6    3    1
11  *        1    4    10    16    19    16    10    4    1
12  *    1    5。。。
13  *求第x行的第一个偶数是第几个
14  *
15  */
16 public class YangHui {
17
18     public static void main(String[] args) {
19         Scanner cin = new Scanner(System.in) ;
20         int line = cin.nextInt() ;
21         cin.close();
22
23         System.out.println(run(line)) ;
24
25     }
26
27         //计算返回值
28     public static  int run(int x){
29                 //第一行、第二行均没有偶数
30         if(x == 1 || x == 2){
31             return -1 ;
32         }
33         //每一行的第一个数为1,第二个数为n-1;第三个数为 n*(n-1)/2
34         if(x%2 == 1){
35             return 2 ;
36         }else if(x*(x-1)%4 == 0){
37             return 3 ;
38         }
39                 //若前三个均不是偶数,则从第四个数开始计算,由于是对称的的,所以判断到第x行的第x个数就可以了
40         for(int i = 4 ; i <= x ; i++){
41
42             int res = cal(x,i) ;
43             if(res%2 == 0){
44                 return i ;
45             }
46         }
47         return -1 ;
48      }
49
50         //传入n,i表示第n行的第i个,返回其值,递归的方法求解
51     private static int cal(int n, int i){
52         if(i > n){
53             return cal(n,2*n-i) ;
54         }
55
56         if(n == 2 && i > 0){
57             return 1 ;
58         }
59
60         if(i == 1){
61             return 1 ;
62         }
63
64         if(i <= 0){
65             return 0 ;
66         }
67
68         int res = cal(n-1,i) + cal(n-1,i-1) + cal(n-1,i-2) ;
69
70         return res ;
71     }
72
73 } 

				
时间: 2024-10-10 23:18:04

华为OJ平台——杨辉三角的变形的相关文章

【华为OJ】【038-iNOC产品部-杨辉三角的变形】

[华为OJ][算法总篇章] [华为OJ][038-iNOC产品部-杨辉三角的变形] [工程下载] 题目描述 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

第十四周OJ项目——杨辉三角

/* * Copyright (c) 2014, 烟台大学计算机学院 * All rights reserved. * 文件名称:test.cpp * 作    者:李晓凯 * 完成日期:2014年 11 月 27 日 * 版 本 号:v1.0 * * 问题描述:根据二维数组输出杨辉三角 * 输入描述:输入一个整数确定行和列数 * 程序输出:输出杨辉三角 */ #include <iostream> using namespace std; int main() { int i,j,n; in

[华为oj]iNOC产品部-杨辉三角的变形

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. 1 #include <iostream> 2 #include <deque> 3 4 usin

Pascal&#39;s Triangle 2 杨辉三角之二

Given an index k, return the kth row of the Pascal's triangle. For example, given k = 3,Return [1,3,3,1]. Note:Could you optimize your algorithm to use only O(k) extra space? 杨辉三角想必大家并不陌生,应该最早出现在初高中的数学中,其实就是二项式系数的一种写法. 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1

Python 中使用 for、while 循环打印杨辉三角练习(列表索引练习)。

Python中使用for while循环打印杨辉三角练习(列表索引练习). 杨辉三角是一个由数字排列成的三角形数表,一般形式如下: 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 1 6 15 20 15 6 1 ....................... 杨辉三角最本质的特征是,它的两条斜边都是由数字1组成的,而其余的数则是等于它肩上的两个数之和. 方法一: __author__ = 'Brad' n = int(input('请输入你想打印杨辉三角

JavaScript实现杨辉三角

杨辉三角的算法还是比较简单易懂的,只是要想在控制台更好的实现三角输出就没那么简单了. 根据目前所学,使用了二维数组实现杨辉三角. 每一行都是一个内层数组. 在输出的时候再将每一个内层数组转换成字符串来输出,这样就不会出现中括号,看起来就更美观. 要想第一行居中,就根据所要输出的行数来给每一个内层数组前面添加空格. 而且要考虑行数越多,下面的每一个数字的长度就越大,然后我就根据最大数字的长度来给每一个数字后面加空格,使每一个数字所占的宽度相同,方便排列. 我这个方法也是假的,不是真正的居中对齐,只

最标准的杨辉三角和一般的杨辉三角

1.最标准的杨辉三角 /* 编写程序打印杨辉三角形 1 变形 1 0 0 0 1 1 1 1 0 0 1 2 1 1 2 1 0 ...... 1 3 3 1 思路: 我们定义一个二维数组,所有元素先初始化为0 给数组的第1列和对角线元素赋值为1 其余元素a[i][j]=a[i-1][j-1]+a[i-1][j] 输出这个二维数组的下三角 */ //杨辉三角 如此标准 #include<stdio.h> #include<stdlib.h> #define N 5 int main

以杨辉三角为例,从内存角度简单分析C语言中的动态二维数组

学C语言,一定绕不过指针这一大难关,而指针最让人头疼的就是各种指向关系,一阶的指针还比较容易掌握,但一旦阶数一高,就很容易理不清楚其中的指向关系,现在我将通过杨辉三角为例,我会用四种方法从内存的角度简单分析动态二维数组,若有不足或错误之处,还请指出! 在讲这之前,以一维数组为例,先重新认识一下数组: int array[5] = {1, 2, 3, 4, 5}; 首先数组名称是该数组的首地址常量,即数组名称就是指针,就有&array[0] == array! 那么我们可以推出*array ==

LeetCode (13) Pascal&#39;s Triangle (杨辉三角 )

题目描述 Given numRows, generate the first numRows of Pascal's triangle. For example, given numRows = 5, Return 从第三行开始,每行除了最左边和最右边两个数为1,其他数字都是上一行中相邻两个数字之和.根据上述规则可以写出下面的代码: class Solution { public: vector<vector<int> > generateRow1() { vector<in