Java初学者必练:50道字符串组合问题及解决方案

需积分: 43 2 下载量 135 浏览量 更新于2024-07-27 收藏 138KB DOC 举报
"《最新Java编程50题集》是一份适合初学者的Java基础知识题集,旨在通过实践巩固理论知识。这份题集包含了50个精心设计的问题,旨在帮助学习者熟悉Java的基本语法、数据结构、算法以及字符串操作。其中,一道题目要求编写一个名为`list`的函数,其功能是将给定的基础字符串(如"ABC")进行所有可能的子串组合,并将结果存储在一个列表中。 具体实现中,`list`函数采用了递归的方法。首先,函数接收两个参数:基础字符串`base`和一个临时结果字符串`buff`。当`base`的长度小于或等于0时,说明已经处理完所有可能的组合,此时将`buff`添加到结果列表`result`中。接着,遍历`base`中的每个字符,创建一个新的字符串副本,删除当前位置的字符,然后将这个新字符串与`buff`加上当前字符的结果传递给递归调用,将返回的子组合添加到`result`中。 在`main`方法中,用户提供了基础字符串"ABCD",然后调用`list`函数并将结果存储在`result`列表中。最后,程序打印出结果的大小和内容,用于检验函数的正确性。这道题目的目的是让学习者理解如何利用递归思想处理字符串组合问题,同时也锻炼了他们的编程逻辑和迭代器的运用。 《最新Java编程50题集》是一份实用的学习资源,对于初学者而言,无论是作为入门练习还是复习巩固,都能从中获益匪浅。通过解决这些题目,学生不仅可以掌握Java语言的基本知识,还能提升解决问题的能力,为后续的编程项目打下坚实的基础。"
2023-05-31 上传
【程序1】 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子, 小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月得兔子总数为多 少? //这就是一个菲波拉契数列问题 public class lianxi01 { public static void main(String[] args) { System、out、println("第1个月得兔子对数: 1"); System、out、println("第2个月得兔子对数: 1"); int f1 = 1, f2 = 1, f, M=24; for(int i=3; i〈=M; i++) {  f = f2; f2 = f1 + f2; f1 = f;  System、out、println("第" + i +"个月得兔子对数: "+f2); } } } 【程序2】 题目:判断101-200之间有多少个素数,并输出所有素数。 程序分析:判断素数得方法:用一个数分别去除2到sqrt(这个数),如果能被整除,  则表明此数不就是素数,反之就是素数。 public class lianxi02 { public static void main(String[] args) { int count = 0; for(int i=101; i〈200; i+=2) { boolean b = false; for(int j=2; j〈=Math、sqrt(i); j++)  { if(i % j == 0) { b = false; break; } else { b = true; }  } if(b == true) {count ++;System、out、println(i );}  } System、out、println( "素数个数就是: " + count); } } 【程序3】 题目:打印出所有得 "水仙花数 ",所谓 "水仙花数 "就是指一个三位数,其各位数字立方与等于该数本身.例如:153就是一个 "水仙花数 ",因为153=1得三次方+5得三次方+3得三次方。 public class lianxi03 { public static void main(String[] args) { int b1, b2, b3;  for(int m=101; m〈1000; m++) { b3 = m / 100; b2 = m % 100 / 10; b1 = m % 10; if((b3*b3*b3 + b2*b2*b2 + b1*b1*b1) == m) { System、out、println(m+"就是一个水仙花数"); }  } } } 【程序4】 题目:将一个正整数分解质因数.例如:输入90,打印出90=2*3*3*5。 程序分析:对n进行分解质因数,应先找到一个最小得质数k,然后按下述步骤完成: (1)如果这个质数恰等于n,则说明分解质因数得过程已经结束,打印出即可. (2 )如果n <> k,但n能被k整除,则应打印出k得值,并用n除以k得商,作为新得正整数您n,重复执行 第一步。 (3)如果n不能被k整除,则用k+1作为k得值,重复执行第一步。 import java、util、*; public class  lianxi04{ public static void main(String[] args) { Scanner s = new Scanner(System、in); System、out、print( "请键入一个正整数: ");  int n  = s、nextInt(); int k=2; System、out、print(n + "=" );  while(k 〈= n) {  if(k == n) {System、out、println(n);break;} else if( n % k == 0) {System、out、print(k + "*");n = n / k; } else k++;  } } }  【程序5】 题目:利用条件运算符得嵌套来完成此题:学习成绩> =90分得同学用A表示,60-89分之间得用B表示,60分以下得用C表示。 import java、util、*; public class lianxi05 { public static void main(String[] args) {  int x; char grade; Scanner s = new Scanner(System、in); System、out、print( "请输入一个成绩: ");  x = s、nextInt(); grade = x >= 90 ? 'A'  : x 〉= 60 ?
2023-05-31 上传
【程序1】 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第 三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? //这是一个菲波拉契数列问题 public class lianxi01 { public static void main(String[] args) { System.out.println("第1个月的兔子对数: 1"); System.out.println("第2个月的兔子对数: 1"); int f1 = 1, f2 = 1, f, M=24; for(int i=3; i<=M; i++) { f = f2; f2 = f1 + f2; f1 = f; System.out.println("第" + i +"个月的兔子对数: "+f2); } } } 【程序2】 题目:判断101-200之间有多少个素数,并输出所有素数。 程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除, 则表明此数不是素数,反之是素数。 public class lianxi02 { public static void main(String[] args) { int count = 0; for(int i=101; i<200; i+=2) { boolean b = false; for(int j=2; j<=Math.sqrt(i); j++) { if(i % j == 0) { b = false; break; } else { b = true; } } if(b == true) {count ++;System.out.println(i );} } System.out.println( "素数个数是: " + count); } } 【程序3】 题目:打印出所有的 "水仙花数 ",所谓 "水仙花数 "是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个 "水仙花数 ",因为153=1的三次方+5的三次方+3的三次方。 public class lianxi03 { public static void main(String[] args) { int b1, b2, b3; for(int m=101; m<1000; m++) { b3 = m / 100; b2 = m % 100 / 10; b1 = m % 10; if((b3*b3*b3 + b2*b2*b2 + b1*b1*b1) == m) { System.out.println(m+"是一个水仙花数"); } } } } 【程序4】 题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。 程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成: (1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。 (2)如果n <> k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数你n,重复执行第 一步。 (3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。 import java.util.*; public class lianxi04{ public static void main(String[] args) { Scanner s = new Scanner(System.in); System.out.print( "请键入一个正整数: "); int n = s.nextInt(); int k=2; System.out.print(n + "=" ); while(k <= n) { if(k == n) {System.out.println(n);break;} else if( n % k == 0) {System.out.print(k + "*");n = n / k; } else k++; } } } 【程序5】 题目:利用条件运算符的嵌套来完成此题:学习成绩> =90分的同学用A表示,60- 89分之间的用B表示,60分以下的用C表示。 import java.util.*; public class lianxi05 { public static void main(String[] args) { int x; char grade; Scanner s = new Scanner(System.in); System.out.print( "请输入一个成绩: "); x = s.nextInt(); grade = x >= 90 ? 'A' : x >= 60 ? 'B' :'C'; System.out.prin