题目描述
如果我们按从上到下、从左到右的顺序把所有数排成一列,可以得到如下数列: 1, 1, 1, 1, 2, 1, 1, 3, 3, 1, 1, 4, 6, 4, 1, \cdots1,1,1,1,2,1,1,3,3,1,1,4,6,4,1,⋯
给定一个正整数 NN,请你输出数列中第一次出现 NN 是在第几个数?
输入描述
输入一个整数 NN。
输出描述
输出一个整数代表答案。
输入输出样例
示例 1
输入
6
输出
13
题解:
先声明一个二维数组存入杨辉三角数据值,在声明一个一维数组把二维数组中数据遍历存入到一维数组中,把要查找数与一维数组中数据对比,相等则是该数所在下标+1即为该数所在杨辉三角行对应第一个出现值位置。+1是因为数组下标从0开始,位置从1开始。
package lanqiaobei.com.yjm.Medium;
import java.util.Scanner;
//杨辉三角
public class YangHuiSanJiao {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int num = scan.nextInt();
int[][] yang = new int[10][];
// 初始化杨辉三角大小
for(int i = 0;i < yang.length;i++) {
yang[i] = new int[i+1];
}
//初始化一个数组存入杨辉三角的值
int sum = 0;
for(int i = 1;i <= yang.length;i++) {
sum += i;
}
int[] arr = new int[sum];
// 遍历赋值
int ind = 0;
for(int i = 0;i < yang.length;i++) {
for(int j = 0;j < yang[i].length;j++) {
if(j == 0 || j == yang[i].length-1) {
yang[i][j] = 1;
arr[ind] = yang[i][j];
ind++;
}else if(i >= 2){
yang[i][j] = yang[i-1][j-1] + yang[i-1][j];
arr[ind] = yang[i][j];
ind++;
}
}
}
// 遍历打印杨辉三角
for(int i = 0;i < yang.length;i++) {
for(int j = 0;j < yang[i].length;j++) {
System.out.print(yang[i][j] + " ");
}
System.out.println();
}
for(int j = 0;j < arr.length;j++) {
if(num == arr[j]) {
System.out.println(j+1);
break;
}
}
}
}