首页 > 编程知识 正文

java入门题目,java基础算法题

时间:2023-05-06 12:52:03 阅读:20201 作者:3292

摔倒了,一定要爬起来。 不起来,别人会看不起你,你也失去机会。

1 .主题:打印杨辉三角形(要求打印10行)什么是杨辉三角形? 接下来是这个

杨辉三角最大的特性是每个数字是该数字肩上的两个数字之和,这个问题经常出现在二维排列和循环控制的学习上

可以假定这些数量存在于二维阵列中吧。 ints [ I ] [ j ]=ints [ I-1 ] [ j-1 ] ints [ I-1 ] [ j ]; 这可以使用for循环和二维数组轻松实现

int[][] ints=new int[10][10]; for(intI=0; i10; I ) for(intj=0; j=i; j () if(I-10||j-10 ) ) { ints[i][j]=1; } else { ints [ I ] [ j ]=ints [ I-1 ] [ j-1 ] ints [ I-1 ] [ j ]; }system.out.print(ints[I][j] ' ); } System.out.println (; )2)主题:假设出生后第三个月开始每月生一对兔子,第三个月开始每月生一对兔子,兔子没有死,那么每月兔子总数是多少? 对于这种可能一开始就没有想法的问题,可以写下前几个数字,然后研究其规律,最后编程实现

写下前十个月的数字吧。 1 1 2 3 5 8 13 21 34 55

通过观察,发现这个数列的法则是每个数字前两位数字的和。 这不是斐波那契数列吧? (我在高中说过话)

可以定义三个变量,分别表示一月兔、二月兔和三月兔,然后使用for循环继续输出每月的兔数

它还定义了用于交换值的变量

每次循环,首先使用额外的变量保存一月的兔子数量。 那个月1月的兔子数量,等于2月的兔子3月出生的窝和本来3月出生的兔子的窝

三月的兔子数量和二月的兔子到了三月一样,原来是三月的兔子

2月的兔子和上个月1月的兔子一样

总和是三个变量的和

int count=1; int oneMonth=1; int twoMonth=0; int threeMonth=0; int cache=0; for(intI=0; i30; I ) { System.out.println (月() ((i 1) )总数) count (一月) oneMonth (二月) twoMonth (三月) threeMonth ); cache=oneMonth; oneMonth=twoMonth threeMonth; threeMonth=twoMonth threeMonth; twoMonth=cache; count=onemonthtwomonththreemonth; }另一个想法是把两个月的兔子看成一圈。 每月的数量等于前两个月的和,一次计算两个月各自的兔子数量

长时间S1、s2; //定义本月和下月兔数s1=1第一个月为1比s2=1; //下个月1比int i=1; //定义控制变量int m=30的//月数//while周期while(true )//第一个月和第二个月的兔子数量都是一对if(I==1||I==2) system.out //控制变量I加上1 } //i,大于3,小于我们应该看到的月份的elseif(im ) { s1=s1 s2; s2=s1 s2; system.out.println (I ' month : ' S1 ); I; //月增加1 system.out.println (I ' month : ) S2 ); I; //月加1 }else{ break; 如果不符合//条件,也可以利用退出java所具有的数据结构进行此操作

LinkedList<Integer> integerList=new LinkedList<>(); for (int i=0;i<30;i++){ if (i<2){ integerList.add(1); System.out.println("月份:"+(i+1)+" 兔子总数:"+integerList.getLast()); }else { integerList.add(integerList.getLast()+integerList.get(integerList.size()-2)); System.out.println("月份:"+(i+1)+" 兔子总数:"+integerList.getLast()); } } 3.题目:判断101-200之间有多少个素数,并输出所有素数。

判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,则表明此数不是素数,反之是素数。

遇到这种题就直接暴力for循环,定义个boolen判断是不是素数

for (int i=101;i<=200;i++){ boolean isPrimeNumber=true; for (int j=2;j<i;j++){ if (i%j==0){ isPrimeNumber=false; break; } } if (isPrimeNumber){ System.out.println(i); } }

有一种巧妙的办法可以不用定义boolen变量作为标志,我们只需要把内层玄幻的j定义在外层,这样如果i等于j说明循环走完了,就可以判断它是一个素数

int j=0; for (int i=101;i<=200;i++){ for (j=2;j<i;j++){ if (i%j==0){ break; } } if (j==i){ System.out.println(j); } }

在这些优化之后我们还可以借用数学的帮助,凡是一个数开方后的数的素数都是原来那个数的素数,至于最后的加一是因为循环是从2开始的,1是任何数的因数

int j=0; int k=0; for (int i=101;i<=200;i++){ k=(int)sqrt(i+1); for (j=2;j<=k;j++){ if (i%j==0){ break; } } if (j==k+1){ System.out.println(i); } } 4.题目:将一个正整数分解质因数。

例如:输入90,打印出90=2*3*3*5。

其实这道题就相当于找素数的升级版,找到给定范围内几个素数的想乘结果等于它本身

做这种题我们很容易想到递归,不断找素数,不断缩小范围

static List<Integer> integerList=new ArrayList<>();private static void Method1() { Scanner scanner=new Scanner(System.in); int number=scanner.nextInt(); getPrimeFactor(number); System.out.println(integerList); } private static void getPrimeFactor(int number) { for (int i=2;i<=number;i++){ if (number%i==0){ integerList.add(i); getPrimeFactor(number/i); break; } } }

我们可以将其转换成while循环

Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int k=2; System.out.print(n+"=");//输出第一步格式 while(k<=n){//初值k为2,n为输入的数字,在程序执行的过程中k渐渐变大(k++),n渐渐变小(n/k) if(k==n){//当n和k相等的时候,就直接输出n的值(此时输出k也行,因为n==k) System.out.println(n); break; } else if(n%k==0){ System.out.print(k+"*");//如果n <> k,但n能被k整除,则应打印出k的值 n = n/k;//n除以k的商,作为新的正整数你n }else{ k++;//如果n不能被k整除,则用k+1作为k的值 } }

 

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。