一、杨辉三角
问题描述:杨辉三角形又称Pascal三角形,它的第i+1行是(a+b)i的展开式的系数。它的一个重要性质是:三角形中的每个数字等于它两肩上的数字相加。下面给出了杨辉三角形的前4行:
1
1 1
1 2 1
1 3 3 1
给出n,输出它的前n行。
解题思想:杨辉三角对于每一个学生来说都不陌生。而用编程重现这个图案就要有相应的办法。我的思想是,首先创建一个二位数组,然后分两步解决:
1)因为每一行的第一个数最后一个数都是1,这是一成不变的,所以将两边的1,利用循环先行解决;
2)之后根据数学规律,每一项的值等于同一列,上一行的值加上下一列上一行的值,用代码完成这种思想即可;
最后将二位数组输出即可。
下面给出代码:
import java.util.Scanner;
public class 杨辉三角形 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int s[][] = new int[n][n]; //数组初始化
for(int i = 0; i < n; i++) //给定两边的一
{
s[i][i] = s[i][0] = 1;
}
for(int i = 2;i < n; i++) //给定中间部分的值
for(int j = 1;j < i; j++)
{
s[i][j] = s[i-1][j-1]+s[i-1][j];
}
for(int i = 0; i < n; i++){ //输出二维数组
for(int j = 0; j <= i; j++)
{
System.out.print(s[i][j]+" ");
}
System.out.println();
}
}
}
二、查找整数
问题描述:给出一个包含n个整数的数列,问整数a在数列中的第一次出现是第几个。
解题思想:其实,这就是对Java语言的基本结构,语法的应用。首先录入这个数列,然后对该数列进行便历,而在遍历的同时,应该对每一个值与给定检查的值进行判断。若成立,则进行位置的输出即可。
下面给出代码:
import java.util.Scanner;
public class 查找整数 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int s[] = new int[n];
for(int i = 0; i < n; i++)
{
s[i] = sc.nextInt();
}
int temp = sc.nextInt();
System.out.println(fun(s,temp));
}
public static int fun(int r[],int k)
{
for(int i = 0;i < r.length;i++ )
{
if(r[i] == k)
{
return i+1;
}
}
return -1;
}
}
问题描述:给出n个数,找出这n个数的最大值,最小值,和。
解题思想:这个题的解决重点在于排序,对给定数列进行升序或者降序的排序后,输出整个数列的第一个值和最后一个值即可获得最大值和最小值。而和就是循环取得元素进行累和即可。下面给出代码:
import java.util.Arrays;
import java.util.Scanner;
public class 数列特征 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int sum = 0;
int n = sc.nextInt();
int a[] = new int[n];
for(int i = 0;i < n;i++)
{
a[i] = sc.nextInt();
sum+=a[i];
}
Arrays.sort(a);
System.out.println(a[n-1]);
System.out.println(a[0]);
System.out.println(sum);
}
}
四、01字串
问题描述:对于长度为5位的一个01串,每一位都可能是0或1,一共有32种可能。它们的前几个是:
00000
00001
00010
00011
00100
请按从小到大的顺序输出这32种01串。
解题思想:这道题的重点其实就是对全排列的应用。设定五个变量对应五个位数,依次由0-9进行多层循环然后得出该数即可。下面给出代码:
public class 零一字串 {
public static void main(String[] args) {
for(int i = 0;i < 2; i++)
for(int j = 0;j < 2; j++)
for(int k = 0;k < 2; k++)
for(int m = 0;m < 2; m++)
for(int n = 0;n < 2; n++)
{
System.out.print(i);
System.out.print(j);
System.out.print(k);
System.out.print(m);
System.out.print(n);
System.out.println();
}
}
}
着重提一下:对于全排列的应用,在蓝桥杯的比赛中几乎是一个必考的点,所以最好掌握一种到两种全排列的方法,我的另一篇博客对全排列进行了讲解,欢迎提出意见和建议。