6.杨辉三角
问题描述
杨辉三角形又称Pascal三角形,它的第i+1行是(a+b)i的展开式的系数。
它的一个重要性质是:三角形中的每个数字等于它两肩上的数字相加。
下面给出了杨辉三角形的前4行:
1
1 1
1 2 1
1 3 3 1
给出n,输出它的前n行。
输入格式
输入包含一个数n。
输出格式
输出杨辉三角形的前n行。每一行从这一行的第一个数开始依次输出,中间使用一个空格分隔。请不要在前面输出多余的空格。
样例输入
4
样例输出
1
1 1
1 2 1
1 3 3 1
数据规模与约定
1 <= n <= 34。
本题参考的java算法:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
int[][] yh=new int[34][100];
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
for(int i=0;i<n;i++)
{
yh[i][0]=1;
yh[i][i]=1;
if(i>1){
for(int j=1;j<i;j++)
{
yh[i][j]=yh[i-1][j]+yh[i-1][j-1];
}
}
}
for(int i=0;i<n;i++)
{
for(int j=0;j<i+1;j++)
{
System.out.print(yh[i][j]+" ");
}
System.out.println();
}
}
}
思路:
1.杨辉三角找规律,从第三行第二个数开始等于其上方数字与上左方数字之和
2.用二维数组储存数值
7.特殊数字
问题描述
153是一个非常特殊的数,它等于它的每位数字的立方和,即153=1*1*1+5*5*5+3*3*3。编程求所有满足这种条件的三位十进制数。
输出格式
按从小到大的顺序输出满足条件的三位十进制数,每个数占一行。
java参考代码:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
int s=0;
int ge,sh,ba;
for(int i=100;i<1000;i++)
{
ge=i%10;
sh=(i/10)%10;
ba=(i/100)%10;
s=ge*ge*ge+sh*sh*sh+ba*ba*ba;
if(s==i)
{
System.out.println(s);
}
}
}
}
思路:
1.暴力枚举
8.回文数
问题描述
1221是一个非常特殊的数,它从左边读和从右边读是一样的,编程求所有这样的四位十进制数。
输出格式
按从小到大的顺序输出满足条件的四位十进制数。
java参考代码:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
int[] s=new int[5];
for(int i=1000;i<10000;i++)
{
s[0]=i%10;
s[1]=(i/10)%10;
s[2]=(i/100)%10;
s[3]=(i/1000)%10;
if(s[0]==s[3]&&s[1]==s[2])
{
System.out.println(i);
}
}
}
}
思路:
暴力枚举
9.特殊回文数
问题描述
123321是一个非常特殊的数,它从左边读和从右边读是一样的。
输入一个正整数n, 编程求所有这样的五位和六位十进制数,满足各位数字之和等于n 。
输入格式
输入一行,包含一个正整数n。
输出格式
按从小到大的顺序输出满足条件的整数,每个整数占一行。
样例输入
52
样例输出
899998
989989
998899
数据规模和约定
1<=n<=54。
java参考代码:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
int[] s=new int[7];
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
for(int i=10000;i<100000;i++)
{
s[0]=i%10;
s[1]=(i/10)%10;
s[2]=(i/100)%10;
s[3]=(i/1000)%10;
s[4]=(i/10000)%10;
if(s[0]==s[4]&&s[1]==s[3])
{
if(s[0]+s[1]+s[2]+s[3]+s[4]==n)
{
System.out.println(i);
}
}
}
for(int i=100000;i<1000000;i++)
{
s[0]=i%10;
s[1]=(i/10)%10;
s[2]=(i/100)%10;
s[3]=(i/1000)%10;
s[4]=(i/10000)%10;
s[5]=(i/100000)%10;
if(s[0]==s[5]&&s[1]==s[4]&&s[2]==s[3])
{
if(s[0]+s[1]+s[2]+s[3]+s[4]+s[5]==n)
{
System.out.println(i);
}
}
}
}
}
思路:
全五位数到六位数挨个枚举,搜索一遍,之后数值条件筛选,符合条件输出