【程序1】
题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第四个月后每个月又生一对兔子,假如兔子都不死,问某个月的兔子总数为多少?
程序分析:兔子的规律为数列1,1,2,3,5,8,13,21…,为Fibonacci数列(斐波那契数列)。
1.使用递归求解:
解题代码:
import java.util.*;
public class Test1{
public static void main(String args[]){
while(true){
int yueshu=new Scanner(System.in).nextInt();
System.out.println("您好:第"+yueshu+"个月的兔子数为:"+f(yueshu)+"对。");}}
public static int f(int x){
if(x==1 || x==2)
return 1;
else
return f(x-1)+f(x-2);}
}
代码运行结果如下图所示:
2.使用循环
解题代码:
import java.util.*;
public class Test1$1{
public static void main(String args[]){
Scanner read=new Scanner(System.in);
while(true){
int yueshu=read.nextInt();
int sum=1,oldsum=0,temp=0;
for(int i=0;i<yueshu-1;i++){
oldsum=sum;
sum+=temp;
temp=oldsum;}
System.out.println("您好:第"+yueshu+"个月的兔子数为:"+sum+"对。");}
}
}
程序运行结果:
总结:
1.在方法1中,由于键盘录将Scanner方法两行代码写为一行,虽然看着简洁,减少了代码量,但是,在while中每次循环都会录入月数时都会new 一个Scanner对象,造成额外的资源消耗。
2.方法一使用递归,有可能会造成内存溢出,对内存要求高,而方法二使用循环可以有效的避免这个问题。
焦点关注:
那么问题来了!!!
众所周知,因不以兔的意志为转移的且不可抗拒的因素存在,近亲(三代以内的直系、旁系亲属)结婚非法,是不能领证的。所以产生一个问题:兔子家族世世代代需要如此苟且而没有诗和远方吗?
No!!!
可以预见,在许久的将来,兔子家族中的非近亲的兔子可以两两成对,全员领证。假如非要给这个时间加上一个期限,最少是多久呢?
经过多久以后,兔子家族的兔子夫妻们可以领结婚证而不犯法呢?
求大神解答???
求大神解答???
求大神解答???
【程序2】
题目:海滩上有一堆桃子,五只猴子来分。第一只猴子把这堆桃子凭据分为五份,多了一个,这只猴子把多的一个扔入海中,拿走了一份。第二只猴子把剩下的桃子又平均分成五份,又多了一个,它同样把多的一个扔入海中,拿走了一份,第三、第四、第五只猴子都是这样做的,问海滩上原来最少有多少个桃子?
public class Test2{
public static void main(String[] args){
int i=0,x=0;
while(x<5){
i++;
int q=i;
for(int y=0;y<5;y++){
if(--q%5==0){
x++;
q=q*4/5;
}
}
if(x==5){
System.out.println(i);
}else{x=0;}
}}
}
下图为程序运行结果:
【程序3】
题目:一个多位数,判断它是不是回文数。如12321是回文数,个位与万位相同,十位与千位相同。
以下为我的解题代码:
import java.util.Scanner;
public class test3 {
public static void main(String[] args) {
Scanner input =new Scanner(System.in);
while(true){
StringBuffer number=new StringBuffer(input.nextLine());
String left=number.toString();
String right=number.reverse().toString();
//System.out.println(left);
//System.out.println(right);
if (left.contains(right)){ //or if(left.equals(right))
System.out.println("Good luck,the number you entered:"+left+"is palindrome" );}
else{
System.out.println("Sorry,the number you entered:"+left+"is not palindrome");}
}}
}
程序运行结果如下图所示:
【程序4】
题目:打印出所有的 "水仙花数 ",所谓 "水仙花数 "是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个 "水仙花数 ",因为153=1的三次方+5的三次方+3的三次方。
解题代码:
import java.util.*;
public class Test4 {
public static void main(String[] args) {
Scanner read=new Scanner(System.in);
int a,b,c;
while(read.hasNext()){
int N=read.nextInt();
for(int i=104;i<N&&i<1000;i++) {
a=i%10;
b=i/10%10;
c=i/100;
if(a*a*a+b*b*b+c*c*c==i)
System.out.println("符合条件的数:"+i);
}
}
}
}
程序运行结果:
【程序5】
题目:求s=a+aa+aaa+aaaa+aa…a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制。
解题代码:
import java.util.*;
public class Test5 {
public static void main(String[] args) {
Scanner read=new Scanner(System.in);
while(read.hasNext()){
int a=read.nextInt(),n=read.nextInt();
if(a>9||n>9){
System.out.println("Sorry,xiaode'ability is too small to process the numbers you enter!!!");
}else{
StringBuffer s=new StringBuffer("s=");
long sum=0,b=0;
for(int i=0;i<n;i++) {
b+=a;
sum+=b;
a=a*10;
s.append(b+"+");
}
System.out.println(s.deleteCharAt(s.length() - 1).append("="+sum));}
}}
}
程序运行结果:
【程序6】
题目:判断n~m之间有多少个素数,并输出所有素数。
程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),为最少除循环次数,如果能被整除, 则表明此数不是素数,反之是素数。
解题代码:
import java.util.*;
public class Test6 {
public static void main(String[] args) {
Scanner read=new Scanner(System.in);
while(read.hasNext()){
int x=read.nextInt(),y=read.nextInt();
if(x>y){
y+=x;
x=y-x;
y-=x;}
panduansushu(x,y);}}
public static void panduansushu(int x,int y){
int count=0;
if(x<=2&&y>=2){
System.out.print(" 素数"+(++count)+":"+2);////此处使用i+2,而不是i++,循环次数几乎减半,提高效率,优化代码
}
if(x%2==0)x++;
for(int i=x;i<=y;i+=2) {
boolean flag=true;
for(int j=2;j<=Math.sqrt(i);j++) {
if(i%j==0) {
flag=false;
break;
}
}
if(flag==true) {
System.out.print(" 素数"+(++count)+": "+i);
}
}
System.out.println('\n'+"你好:"+x+"~"+y+"之间的素数数量为:"+count);
}
}
程序运行结果:
总结:特殊情况,2是素数也是偶数,是唯一一个是偶数的素数,因此需要单练,除此之外,所有偶数应在for循环判断是否素数之前(外)排除,不应该循环内判断是否偶数,否则每次循环都将判断,效率不佳,提高程序效率,近乎将循环次数减半。
判断素数的方法:用一个数分别去除2到sqrt(这个数),为最少循环次数,如果能被整除, 则表明此数不是素数,反之是素数。
【程序7】
题目:利用条件运算符的嵌套来完成此题:学习成绩> =90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。
**解题代码:**程序运行结果:
import java.util.*;
public class Test7 {
public static void main(String[] args) {
Scanner read=new Scanner(System.in);
while(read.hasNext()){
int score=read.nextInt();
char grade=score>=90?'A':score>=60?'B':'C';
System.out.println("得分为"+score+"的同学,你的评级为"+grade);
}
}
}
程序运行结果:
【程序8】
题目:一球从H米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在 第n次落地时,共经过多少米?会反弹多高?
解题代码:
import java.util.*;
public class Test8 {
public static void main(String[] args) {
while(true){
Scanner read=new Scanner(System.in);
System.out.println("请输入高度H(米),次数n");
int H=read.nextInt(),n=read.nextInt();
System.out.println("第"+n+"次会反弹"+(double)H/(2<<(n-1))+"米高");
fangfa(H,n);
}}
public static void fangfa(int H,int n){
int s=H;
for(int i=1;i<n;i++){
H=H/2;
s+=2*H;
}
System.out.println("移动的总路程为:"+s);
}
}
程序运行结果:
【程序9】
题目:有1、2、3、4四个数字,能组成多少个互不相同且一个数字中无重复数字的三位数?并把他们都输入。
解题代码:
class Test9 {
public static void main(String[] args) {
int count=0;
for(int i=1;i<5;i++) {
for(int j=1;j<5;j++) {
for(int k=1;k<5;k++) {
if(i!=j&&j!=k&&i!=k) {
System.out.println("正在打印第"+(++count)+"个数字:"+(i*100+j*10+k));
}
}
}
}
System.out.println("总共有"+count+"个数符合条件。");
}
}
程序运行结果:
路阻且长之Java学习:
API中的重要类(一):
https://blog.csdn.net/Veer_c/article/details/103803248
API中的重要类(二):
https://blog.csdn.net/Veer_c/article/details/103807515
API中的重要类(三):
https://blog.csdn.net/Veer_c/article/details/103808054
Java中的IO流(一):
https://blog.csdn.net/Veer_c/article/details/103833045
Java中的IO流(二):
https://blog.csdn.net/Veer_c/article/details/103833423
Java中的IO流(三):
https://blog.csdn.net/Veer_c/article/details/103833811
Java多线程(一):
https://blog.csdn.net/Veer_c/article/details/103842078
Java多线程(二):
https://blog.csdn.net/Veer_c/article/details/103842263
Java多线程(三):
https://blog.csdn.net/Veer_c/article/details/103842317
Java多线程(四):
https://blog.csdn.net/Veer_c/article/details/103842602
网络编程上(UDP):
https://blog.csdn.net/Veer_c/article/details/103843591
网络编程下(TCP):
https://blog.csdn.net/Veer_c/article/details/103843825
MySQL数据库(一):
https://blog.csdn.net/Veer_c/article/details/103844059
MySQL数据库(二):
https://blog.csdn.net/Veer_c/article/details/103844537
MySQL数据库(三):
https://blog.csdn.net/Veer_c/article/details/103844739
JDBC技术(一):
https://blog.csdn.net/Veer_c/article/details/103845176
JDBC技术(二):
https://blog.csdn.net/Veer_c/article/details/103879890
JDBC技术(三):
https://blog.csdn.net/Veer_c/article/details/103880021
JDBC技术(四):
https://blog.csdn.net/Veer_c/article/details/103882264
HTML的基础框架(一):
https://blog.csdn.net/Veer_c/article/details/103882385
HTML的基础框架(二):
https://blog.csdn.net/Veer_c/article/details/103882684
CSS入门(一)
https://blog.csdn.net/Veer_c/article/details/103882856
CSS入门(二):
https://blog.csdn.net/Veer_c/article/details/103883102
JavaScript实用案例与常见问题(一):
https://blog.csdn.net/Veer_c/article/details/103894959
JavaScript实用案例及常见问题(二):
https://blog.csdn.net/Veer_c/article/details/103895166
BOM编程详解:
https://blog.csdn.net/Veer_c/article/details/103895433