目录
题目1:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少(计算30个月的)?
题目2:判断101-200之间有多少个素数,并输出所有素数。 程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除, 则表明此数不是素数,反之是素数。
题目3:打印出所有的 "水仙花数 ",所谓 "水仙花数 "是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个 "水仙花数 ",因为153=1的三次方+5的三次方+3的三次方。
题目5:利用条件运算符的嵌套来完成此题:学习成绩> =90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。
题目7:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
题目8:求s=a+aa+aaa+aaaa+aa…a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制。
题目9: 一个数如果恰好等于它的因子之和,这个数就称为 "完数 "。例如6=1+2+3.编程 找出1000以内的所有完数。
题目10: 一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在 第10次落地时,共经过多少米?第10次反弹多高?
题目1:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少(计算30个月的)?
public static void main(String[] args) { System.out.println("第1个月兔子总数为:1对"); System.out.println("第2个月兔子总数为:1对"); System.out.println("第3个月兔子总数为:2对"); int sum = 2; int[] add = new int[30]; add[0] = 1; add[1] = 2; for (int i = 2; i <= 28; i++) { add[i] = add[i - 2] + add[i - 1]; sum += add[i-2]; System.out.println("第" + (i + 2) + "个月兔子总数为:" + sum + "对"); } } //0 0 1 1 2 3 5 8 13每个月增加的兔子
题目2:判断101-200之间有多少个素数,并输出所有素数。
程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除, 则表明此数不是素数,反之是素数。
public static void main(String[] args) {
int count=0;
for (int i = 101; i <=200; i++) {
int j;
for ( j = 2; j <=i; j++) {
if (i%j==0) {
break;
}
}
if (i==j) {
System.out.println(i);
count++;
}
}
System.out.println("101-200之间有"+count+"个素数");
}
题目3:打印出所有的 "水仙花数 ",所谓 "水仙花数 "是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个 "水仙花数 ",因为153=1的三次方+5的三次方+3的三次方。
public static void main(String[] args) {
System.out.println("水仙花数有:");
for (int i = 100; i <1000; i++) {
int geWei=i%10;
int shiWei=i/10%10;
int baiWei=i/100;
if (geWei*geWei*geWei+shiWei*shiWei*shiWei+baiWei*baiWei*baiWei==i) {
System.out.print(i+" ");
}
}
}
题目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的值,重复执行第一步。
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
System.out.println("请输入一个不小于2的正整数n:");
int n=sc.nextInt();
while (n<2) {
System.out.println("您的输入有误。请重新输入!");
n=sc.nextInt();
}
System.out.print(n+"=");
int k=2;
do {
if (n==k) {
System.out.print(k);
k+=1;
}else if (n>k&&n%k==0) {
System.out.print(k+"*");
n=n/k;
}else if (n%k!=0) {
k=k+1;
}
} while (k<=n);
sc.close();
}
题目5:利用条件运算符的嵌套来完成此题:学习成绩> =90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
System.out.println("请输入您的成绩:");
int score=sc.nextInt();
while (score<0||score>100) {
System.out.println("您的输入有误,请重新输入");
score=sc.nextInt();
}
String rate=score>=60?(score>=90?"A":"B"):"C";
System.out.println("您的评级为:"+rate);
}
练习06:输入两个正整数m和n,求其最大公约数和最小公倍数。
在循环中,只要除数不等于0,用较大数除以较小的数,将小的一个数作为下一轮循环的大数,取得的余数作为下一轮循环的较小的数,如此循环直到较小的数的值为0, 返回较大的数,此数即为最大公约数,最小公倍数为两数之积除以最大公约数。
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
System.out.println("请输入正整数m:");
int m=sc.nextInt();
System.out.println("请输入正整数n:");
int n=sc.nextInt();
if(m>n){
int temp=m;
m=n;
n=temp;
}
int product=m*n;
do {
int temp1=n;
n=m%n;
m=temp1;
} while (n!=0);
System.out.println("这两数最大公约数为:"+m);
System.out.println("最小公约数为:"+(product/m));
}
题目7:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
public static void main(String[] args) {
Scanner sc =new Scanner(System.in);
System.out.println("请输入一串字符:");
String str=sc.nextLine();
char[] array=str.toCharArray();//字符串转字符 存入数组
int ziMu=0;
int number=0;
int space=0;
int other=0;
for (int i = 0; i < array.length; i++) {
if (array[i]>=48&&array[i]<=57) {
number++;
}else if ((array[i]>=65&&array[i]<=90)||(array[i]>=97&&array[i]<=122)) {
ziMu++;
}else if (array[i]==32) {
space++;
}else{
other++;
}
}
System.out.println("数字的个数是:"+number+"\t字母的个数是:"+ziMu+"\t空格的个数是"+space+"\t其他字符的个数是:"+other);
sc.close();
}
题目8:求s=a+aa+aaa+aaaa+aa…a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制。
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
System.out.println("请输入a的值:");
int a=sc.nextInt();
System.out.println("请输入有几个数字相加:");
int n =sc.nextInt();
String s=""+a;
int b=a;
int sum=0;
for (int i = 1; i <=n; i++) {
if (i>1) {
s=s+"+"+a;
}
sum+=a;
a=a*10+b;
}
System.out.println("s="+s+"="+sum);
sc.close();
}
题目9: 一个数如果恰好等于它的因子之和,这个数就称为 "完数 "。例如6=1+2+3.编程 找出1000以内的所有完数。
public static void main(String[] args) {
System.out.println("1000以内所有完数有:");
for (int i = 2; i <=1000; i++) {//1不是完数
int sum=0;//每一次循环归0
for (int j = 1; j <i; j++) {
if (i%j==0) {
sum+=j;
}
}
if (sum==i) {
System.out.print(i+" ");
}
}
}
题目10: 一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在 第10次落地时,共经过多少米?第10次反弹多高?
public static void main(String[] args) {
double sum=0;
double height=100;
for (int i = 1; i <=10; i++) {
sum+=height;//落下来
height=height/2;
sum+=height;//弹上去
}
sum-=height;//减去第10次弹起的高度
System.out.println("第十次落地经过"+sum+"米");
System.out.println("第十次反弹"+height+"米");
}