您的位置:首页 > 编程语言 > Java开发

编程练习题(java)

2012-07-07 17:34 274 查看
这是刚学编程语言练习经典题目:


【程序1】
题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一

对兔子,假如兔子都不死,问每个月的兔子总数为多少?
1.程序分析: 兔子的规律为数列1,1,2,3,5,8,13,21....

public class FibonacciSequence {
public static void main(String[] args) {
//fibonacciWithNoRecursion();

for(int i=1; i<=12; i++){
int result = fibonacciRecursion(i) * 2;
System.out.println("第"+ i +"个月"+ result );
}

/*
for(int i=1; i<=12; i++){
int result = warpprFibonacciRecursion(i) * 2;
System.out.println("第"+ i +"个月"+ result );
}
*/
}
//1.
private static void fibonacciWithNoRecursion()
{
int first=1, second=1;
int sum=0;
System.out.println("第"+ first +"个月"+ 2 );
System.out.println("第"+ second +"个月"+ 2 );
for(int i=3; i<=12; i++){
sum = first + second;
first = second;
second = sum;

System.out.println("第"+ i +"个月"+ sum * 2 );
}
}
//2.
private static int fibonacciRecursion(int nCount)
{
if(nCount == 0){
return 0;
}else if(nCount == 1 || nCount == 2){
return 1;
}else{
return fibonacciRecursion(nCount-1) + fibonacciRecursion(nCount-2);
}
}
//3.
private static int warpprFibonacciRecursion(int nCount){
return fibonacciRecursion(nCount, 1, 1);
}
private static int fibonacciRecursion(int nCount,int first, int second){
if(nCount == 1 || nCount == 2 )
return second;
else
return fibonacciRecursion(nCount-1, second, first+second);
}

}





【程序2】
题目:判断101-200之间有多少个素数,并输出所有素数。
1.程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,
则表明此数不是素数,反之是素数。

public class Prime{
public static void main(String[] agrs){

for(int i = 101; i <= 200; i++ ){
double $length = Math.sqrt(i);
boolean flag = true;
for(int j=2; j<= $length; j++){
if(i%j == 0)
flag = false;
}

if(flag == true){
System.out.println(i);
}
}

}
}





【程序3】
题目:打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。例如:

153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方。

1.程序分析:利用for循环控制100-999个数,每个数分解出个位,十位,百位。

public class Xianhua {
public static void main(String args[]){
Xianhua x=new Xianhua();
x.f();
}
public void f(){
int a,b,c,d;
for ( int i=100;i<=999 ;i++ )
{
a=i/100;
b=(i/10)%10;
c=i%10;
d=a*a*a + b*b*b + c*c*c;

if(i==d)
System.out.println(i);
}
}
}


public class TestFuck{
public static void main(String args[]){

for(int i=100;i<1000;i++){
String s =   String.valueOf( i);
int[]  j=new  int[3];
for(int k=0;k<3;k++)
j[k]= s.charAt(k)- '0';

if( i== ( j[0]*j[0]*j[0] + j[1]*j[1]*j[1] + j[2]*j[2]*j[2]))
System.out.print(i+"  ");
}

}
}


public class test{
public static void main(String args[]){

for(int i=100;i<1000;i++){
String s =   String.valueOf( i);
int[]  j = new  int[3];
for(int k=0;k<3;k++)
j[k]= s.charAt(k)- '0';

if( i== (Math.pow(j[0], 3) + Math.pow(j[1],3) + Math.pow(j[2],3)))
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的值,重复执行第一步。

import java.util.*;

public class Decomposition {
public static void main(String[] args) {
ArrayList<Integer> $array=new ArrayList<Integer>();
Scanner sc=new Scanner(System.in);
System.out.println("请输入一个正整数:");
int n = sc.nextInt();

$array=DecompositionOfPrimeFactors(n, $array);

System.out.print(n+"=");
for(int i=0;i<$array.size();i++){
if(i!=$array.size()-1)
System.out.print($array.get(i)+"*");
else
System.out.print($array.get(i));
}
}

public static ArrayList<Integer> DecompositionOfPrimeFactors(int $int, ArrayList<Integer> $array){
if($int <= 3){
$array.add($int);
}else{
for(int i=2; i<=$int; i++){
if($int % i == 0){
$array.add(i);
$int /= i;
if($int != 1)
$array = DecompositionOfPrimeFactors($int, $array);
break;
}
}
}
return $array;
}
}





【程序5】
题目:利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下

的用C表示。
1.程序分析:(a>b)?a:b这是条件运算符的基本例子。

import java.util.*;

public class TernaryOperator{
public static void main(String[] args){
Scanner scanner=new Scanner(System.in);
int score = scanner.nextInt();

char result = (score >= 90) ? 'A':
(score < 60) ? 'C': 'B';

System.out.println(result);
}
}





【程序6】
题目:输入两个正整数m和n,求其最大公约数和最小公倍数。
1.程序分析:利用辗除法。

import java.util.*;

public class GCD_LCM{
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
int m=sc.nextInt();
System.out.println("求最小公倍数:" + commonMultiple(n,m));
System.out.println("求最大公约数" + commonDivisor(n,m));
}
//求最大公约数
public static int commonDivisor(int n,int m){
//辗转相除是用大的除以小的。如果n<m,第一次相当n与m值交换
while(n%m != 0){
int temp = n%m;
n=m;
m=temp;
}

return m;
}

//求最小公倍数
public static int commonMultiple(int n,int m){
return n*m/commonDivisor(n,m);
}

}





【程序7】
题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
1.程序分析:利用while语句,条件为输入的字符不为'\n'.

import java.util.*;

public class test{
public static void main(String args[]){
int letters=0;//英文字母
int blankSpace = 0;//空格
int $number=0; //数字
int otherCharacters=0; //其它字符

Scanner sc = new Scanner(System.in);
String strInput = sc.nextLine();

for(int i=0; i< strInput.length();i++){

char currChar = strInput.charAt(i);

if((currChar>='a' && currChar<='z') || (currChar>='A' && currChar<='Z')){
letters++;
}else if(currChar==' '){
blankSpace++;
}else if(currChar>='0' && currChar<'9'){
$number++;
}else{
otherCharacters++;
}
}

System.out.println("英文字母:" + letters);
System.out.println("空格:" + blankSpace);
System.out.println("数字:" + $number);
System.out.println("其它字符:" + otherCharacters);

}
}





【程序8】
题目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),

几个数相加有键盘控制。

1.程序分析:关键是计算出每一项的值。

import java.util.*;

public class test{
public static void main(String args[]){
Scanner sc = new Scanner(System.in);
System.out.println("求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加)");

System.out.println("请输入a:");
String a = sc.nextLine();
System.out.println("请输入表达式右侧的项数:");
int $length = sc.nextInt();

int sum = 0;
for(int i=1; i <= $length; i++){
sum += getIntByIndex(i, a);
}

System.out.println("s=" + sum);
}

private static int getIntByIndex(int index, String a){
StringBuilder sb = new StringBuilder();
for(int i=0; i< index; i++){
sb.append(a);
}

return Integer.parseInt(sb.toString());
}
}





【程序9】
题目:一个数如果恰好等于它的因子之和,这个数就称为"完数"。例如6=1+2+3.编程 找出1000以内的所有完数。

import java.util.*;

public class test{
public static void main(String args[]){
int i,j,sum;                 // i为因数,sum为因数之和。
for(j=2;j<=1000;j++){
sum=0;                                   // 在此处给sum赋值,刚开始我在上面就赋值,出现程序运行无结果
for(i=1;i<j;i++){
if(j%i==0)
sum=sum+i;              // 将因数相加
}

if(sum==j){
System.out.print(j+"是完数,因数是:");
for(i=1;i<j;i++){
if(j%i==0)
System.out.print(i+" ");
}
System.out.println();
}
}
}

}





【程序10】
题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在 第10次落地时,共经过多少米?第10次反弹多高?

import java.util.*;

public class test{
public static void main(String args[]){
double height=100.0;
for(int i=0; i<10; i++ ){
height/=2;
}
System.out.println(height);
}


import java.util.*;

public class test{
public static void main(String args[]){
double $height = getHightByCount(10, 100.0);
System.out.println($height);
}

private static double getHightByCount(int nCount, double height){
if(nCount == 0)
return height;
else
return getHightByCount(nCount-1, height/2);
}
}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: