题目描述:
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值
思路:
找规律
*当n<3时,没有偶数,输出-1;
*当n为奇数时,第一个偶数位置在第二,输出2;
*当n为偶数且能被4整除时,第一个偶数位置在第三,输出3;
*当n为偶数但不能被4整除时,偶数位置在第四,输出4
import java.util.Scanner;
public class Main
{
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while (scanner.hasNext())
{
int n = scanner.nextInt();
if (n == 1 || n == 2)
System.out.println(-1);
else if (n % 2 == 1)
System.out.println(2);
else if (n % 4 == 0)
System.out.println(3);
else
System.out.println(4);
}
}
}
思路二:
* 杨辉三角变形
* 每一行有2 * i - 1个数,中间的数位于第i个位置
* 从第1行开始(而不采用第0行)
* map[i][j] = map[i - 1][j - 1] + map[i - 1][j - 2] + map[i - 1][j]
* 在算map[i][1]直接赋值,否则map[i - 1][j - 2]会数组越界
* 判断第几位是偶数时,只需循环到中间位置即可,因为每一行的数是对称的。
import java.util.Scanner;
public class Main
{
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while (scanner.hasNext())
{
int n = scanner.nextInt();
int[][] map = new int[n + 1][2 * n];
map[1][1] = 1;
for (int i = 2; i <= n; i++)
{
map[i][1] = 1;
for (int j = 2; j <= 2 * i - 1; j++)
map[i][j] = map[i - 1][j] + map[i - 1][j - 1] + map[i - 1][j - 2];
}
for (int i = 1; i <= n; i++) //两边对称
if (map[n][i] % 2 == 0)
{
System.out.println(i);
break;
}
}
}
}