java 练习题 大家帮我看看还有什么地方可以改进的 大家也可以收集 大家帮我看看我那些方面还需要改进的

时间:2022-04-11 11:41:21
【程序1】   
题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?   
1.程序分析:   兔子的规律为数列1,1,2,3,5,8,13,21....  
import java.util.*;
public class Test1
{   public static void main (String[] args)
{
       Scanner in=new Scanner(System.in);

   //输入你经过的时间
   System.out.print("经过多少时间??:");
int time =in.nextInt();

   int []a  =new int[time];
    a[0]=1;
a[1]=1;
   for(int i=2;i<a.length;i++)
{
   a[i]=a[i-1]+a[i-2];
 } 
              for(int i=0;i<time;i++)
System.out.println("第"+(i+1)+"月,有兔子"+a[i]+"对\t");
}

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

public class Test2
{   public static boolean isPrime(int num) {   
       for(int i = 2; i <= Math.sqrt(num); i++) {//程序默认2是素数,当j=2时,循环不执行
           if(num % i == 0) {
             return false;
           }
       }
       return true;
    }
public static void main (String args[])
{

 for(int i=101;i<=200;i++)
{
       if(Test2.isPrime(i)) {
                System.out.println(i + " is a prime");
   }
     }
}
}
【程序3】   
题目:打印出所有的 "水仙花数 ",所谓 "水仙花数 "是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个 "水仙花数 ",因为153=1的三次方+5的三次方+3的三次方。   
1.程序分析:利用for循环控制100-999个数,每个数分解出个位,十位,百位。  
import java.util.*;
import java.lang.Object;
public class Test3
{
public static boolean isWater(int num)
{
      int a=num%10; //个位数
int b=(num%100)/10;//十位数
 int c=num/100;//百位数
 if(num==(Math.pow(a,3)+Math.pow(b,3)+Math.pow(c,3)))
{
 return true;
 }
 return false;
 }
 public static void main(String args[])
{
 for(int i=100;i<=999;i++)
{if(Test3.isWater(i))
{
    System.out.println(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 Test4
{ //来自水晶之恋
//爱如空气
   public static void main(String[] args)
   {
     int k=2;
     Scanner input=new Scanner(System.in); 
     System.out.print("请输入一个正整数:");
     int num=input.nextInt();
     if(num<=1)
     {
       System.out.println("无效的被分解数!!");
       return;
     }
     if(num==k)
     {
       System.out.println(num+"="+"1*"+num);
     }
     else
     {
       System.out.print(num+"=1");
       while(num>=k)
       {
          if(num%k==0)
          {
             System.out.print("*"+k);
             num=num/k;
          }
          else
          {
             k=k+1;
          }
       }
     }
   }

【程序5】   
题目:利用条件运算符的嵌套来完成此题:学习成绩> =90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。   
1.程序分析:(a> b)?a:b这是条件运算符的基本例子。   
import java.util.*;
public class Test4
{  
public static void main(String[] args){
int a ;
Scanner in = new Scanner(System.in);
System.out.println("请输入你的成绩(100以内的整数)");
        
a = in.nextInt();

        if ( a >= 90)
        {
System.out.print( "你的成绩是 :A级" );
        }
else {
if ( a >= 60 && a<= 89)
{
System.out.print("你的成绩是 :B级");
}
else {
  System.out.print("你的成绩是 :C级");
}
}
    }

}
【程序6】   
题目:输入两个正整数m和n,求其最大公约数和最小公倍数。   
1.程序分析:利用辗除法。 
import java.util.*;
public class TestCommonNum
{ static long a = 0,b =0 ,c =0;
public static void main(String[] args) {
System.out.println("please input two numbers :");
Scanner in = new Scanner(System.in);
System.out.println("first number:");
a = in.nextLong();
System.out.println("fsecond number:");
b = in.nextLong();
System.out.println("gongyueshu " +commonMul( a ,b));

System.out.println("gongbeishu " +a * b / commonMul( a ,b));
}

public static long commonMul(long x ,long y){
if (x < y) {
long temp =0;
temp = x;
x = y;
y = temp;
}

do
{
c = x % y;
x = y;
y = c; 
}
while (c != 0);
return x;
}
}  
【程序7】   
题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。   
1.程序分析:利用while语句,条件为输入的字符不为 '\n '.   
import java.util.*;

public class Test4{
 public static void main (String [] args){
      String s  = "sdfj af-0^&* 5 4y4";
  int charNum = 0;
  int blankNum = 0;
  int Num = 0;
  int  otherNum = 0;

  char  a[] = s.toCharArray() ;
 for (int i = 0; i < a.length; i++){
 if(a[i] >= 'a' && a[i] <= 'z' || a[i] >= 'A' && a[i] <= 'Z'){
 charNum ++;
 }else if(a[i] == ' '){
blankNum ++;
 }else if( a[i] >= '1' && a[i] <= '9'){
Num ++;
 }else{
otherNum ++;
 }
 }

 System.out.println("字母的个数"+charNum);
 System.out.println("空格的个数"+blankNum);
 System.out.println("数字的个数"+Num);
  System.out.println("其他字符的个数"+otherNum);
 }
}
【程序8】   
题目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制。   
1.程序分析:关键是计算出每一项的值。
   public class Test
{
public static void main(String args[]){
double a = 1.0;     //要计算的数字
double b = a;   //控制变化的递增的大小
double sum = 0.0;  //计算结果的总和
double Cnum = 3.0;//要求几个数相加
sum = a;
for (double i = 1.0; i <= Cnum ; i++){  
double c =  0.0;
c = b * Math.pow(10.0, i);
a += c;
sum += a;
}

System.out.println(sum);

}
}

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

class TestWanShu{public static void main(String[] args)  
int sum = 0;
int sq ;
int wanshu = 1;
System.out.println( wanshu +" 是一个完数");
for (wanshu = 2; wanshu <= 1000 ; wanshu ++ ){
sq = wanshu / 2;
do{
if (wanshu % sq == 0){
sum +=  sq;
}
sq --;
}while (sq > 0);

if ( wanshu == sum){

System.out.println(wanshu + "是一个完数;");
}
sum = 0;
}
   }
}
【程序10】   
题目:一球从100米高度*落下,每次落地后反跳回原高度的一半;再落下,求它在   第10次落地时,共经过多少米?第10次反弹多高?   
public class Test4
{  
public static void main(String[] args){
double a ;
double sum;

a = 100;
        sum = 0;
for ( int i = 0; i < 10 ; i++ )
{
sum += 2 * a;
a = a/2;
}
      System.out.println(" 第10次落地时,共经过:" + (sum -100) +"米");
  System.out.println("第10次反弹" + a + "米");
    }
}

4 个解决方案

#1


【程序11】   
题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?   
1.程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去   掉不满足条件的排列
。   

public class Subject11 {
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&&i!=k&&j!=k)
      {
       count++;
       System.out.println(i*100+j*10+k);
      }
     }
    }
   }
   System.out.println("由1,2,3,4共可以组成"+count+"个互不相同且无重复数字的三位数!");
}
}
//来自http://hi.baidu.com/fairytalesh/blog/item/160f3c17fcb5b058f3de320a.html
【程序12】   
题目:企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数?   
1.程序分析:请利用数轴来分界,定位。注意定义时需把奖金定义成长整型。   
import java.util.*;
public class Test4

   public static void main(String[] args)
   {
     long reward;
 Scanner in = new Scanner(System.in);
 System.out.println("输入当月利润 :");
 reward = in.nextLong();
 double b ;
 long a = reward;
     if (a <= 10000 && a > 0){

 b =(long) a * 10/100;
 System.out.println("你可以获得奖金 :" + b);
     }
 else if (a > 100000 && a <= 200000){
 b = (long)  (a - 100000) * 7.75/100 + (100000 * 10/100);
        System.out.println("你可以获得奖金 :" + b );
  }
  else if (a > 200000 && a <= 400000){
  b = (long) (a - 200000) * 5/100 + (100000 * 7.5/100) + (100000 * 10/100);
        System.out.println("你可以获得奖金 :" + b );
  }
   else if (a > 400000 && a <= 600000){
   b = (long) (a - 400000) * 3/100 +(200000 * 5/100) +(200000 * 7.5/100) + (100000 * 10/100);
        System.out.println("你可以获得奖金 :" + b );
  }
  else if (a > 600000 && a <= 1000000){
  b = (long) (a - 600000) * 1.5/100 +(200000 * 5/100) +(200000 * 3/100)+(200000 * 7.5/100) + (100000 * 10/100);
        System.out.println("你可以获得奖金 :" + b );
  }
    else if (a > 1000000 ){
b = (long) (a - 1000000) * 1.5/100 +(200000 * 5/100) +(400000 * 1.5/100) +(200000 * 3/100)+(200000 * 7.5/100) + (100000 * 10/100);
        System.out.println("你可以获得奖金 :" + b);
  }
   else {

System.out.println("你的输入有错误 :");
}
   }
}
【程序13】   
题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?   
1.程序分析:在10万以内判断,先将该数加上100后再开方,再将该数加上268后再开方,如果开方后的结果满足如下条件,即是结果。请看具体分析:   
public class TestFullSqrt 
{
public static void main(String[] args) 
{
for (long i = 1 ; i < 100000; i ++ )
{
if ( Math.sqrt(i + 100) % 1 == 0 && Math.sqrt(i + 268) % 1 == 0)
{
System.out.println(i + "满足加上100后是一个完全平方数,再加上168又是一个完全平方数");
}
}
}
}
【程序14】   
题目:输入某年某月某日,判断这一天是这一年的第几天?   
1.程序分析:以3月5日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天,特殊情况,闰年且输入月份大于3时需考虑多加一天。   
import java.util.*;
public class TestCommonNum
{ static long a = 0,b =0 ,c =0;
public static void main(String[] args) {
System.out.println("please input two numbers :");
Scanner in = new Scanner(System.in);
System.out.println("first number:");
a = in.nextLong();
System.out.println("fsecond number:");
b = in.nextLong();
System.out.println("gongyueshu " +commonMul( a ,b));

System.out.println("gongbeishu " +a * b / commonMul( a ,b));
}

public static long commonMul(long x ,long y){
if (x < y) {
long temp =0;
temp = x;
x = y;
y = temp;
}

do
{
c = x % y;
x = y;
y = c; 
}
while (c != 0);
return x;
}
}
【程序15】   
题目:输入三个整数x,y,z,请把这三个数由小到大输出。   
1.程序分析:我们想办法把最小的数放到x上,先将x与y进行比较,如果x> y则将x与y的值进行交换,然后再用x与z进行比较,如果x> z则将x与z的值进行交换,这样能使x最小。   
import java.util.*;
public class Test4

   public static void main(String[] args)
   {      int x;
          int y;
          int z;
  Scanner in = new Scanner(System.in);
  System.out.print( "请输入x的值 :");
  x = in.nextInt();
  System.out.print("请输入y的值 :");
   y = in.nextInt();
System.out.print("请输入z的值 :");
z = in.nextInt();
         System.out.print("x ,y , z 从小到大的顺序是:");
if ( x < y)
{  if ( x < z){  
    if (y < z){
System.out.println(x +" " + y + " "  + z);
}else{
    System.out.println(x +" " + z + " " + y);
}
   }else {
        System.out.println(z +" " + x +" " + y);
   }
}else{
int temp = x;
x = y;
y = temp;
    if (y < z){
System.out.println(x +" " + y + " " + z);
            }else{
 if ( z < x)
 {
 System.out.println(z +" " + x + " " + y);
                 }else
       System.out.println(x +" " + z +" "  + y);
}
}
   }
}
【程序16】   
题目:输出9*9口诀。   
1.程序分析:分行与列考虑,共9行9列,i控制行,j控制列。
public class Test4
{  
public static void main(String[] args){

          for (int j = 1;  j <= 9 ;  j++)  {
               for (int i = 1; i <= j  ; i++){
   System.out.print( i + "x" + j + "=" + i * j + "\t");
    }
 System.out.println();   
            }   
【程序17】   
题目:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个   第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下   的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。   
1.程序分析:采取逆向思维的方法,从后往前推断。 
import java.util.*;
public class Test4

   public static void main(String[] args)
   {  int Peach = 1;
         
       for (int i = 0; i < 10 ; i ++ )
        {  
   Peach = 2 * Peach + 1;
        }
System.out.println ("猴子所摘的桃子总的有 :" + Peach + "个。");
   }
}  //这是我自己写的后来在网上发现还有更好的大家可以看一下

import java.io.IOException;
/**
 * 测试用类
 * @author sunt
 */
public class GetPeach{
 
/**
     * 主函数
     * @param args
     * @throws IOException
     */
public static void main(String[] args) throws IOException {
        System.out.println(getNumOfPeachFirstDay(10));

}
 
/**
     * 根据天数计算第一天总共摘了多少桃子
         * @param numOfDays 总天数
     * @return 第一天总共摘的桃子数
     */
public static int getNumOfPeachFirstDay(int numOfDays) {
if (numOfDays < 1) {
throw new RuntimeException("NumOfDays must more than zero!");

}
if (numOfDays == 1) {
return 1;

}
return (getNumOfPeachFirstDay(numOfDays - 1) + 1) * 2;

}
}

这是递归,按程序角度是顺着执行,但按楼主角度严格意义上可能还不是顺着做。如果真要严格按题意非思考性的硬找可以用枚举。
import java.io.IOException;
/**

 * 测试用类

 * @author sunt

 */
public class GetPeach{
 /**
     * 主函数
     * @param args
     * @throws IOException
     */
public static void main(String[] args) throws IOException {
        System.out.println(getNumOfPeachFirstDay(10));
}
 
/**
     * 根据桃子数枚举,看最后一天是否是1个桃子。
     * 
     * @param numOfDays 总天数
     * @return 第一天总共摘的桃子数
     */
public static int getNumOfPeachFirstDay(int numOfDays) {
boolean rightFind = false;
int numOfPeach = 0;
int num = 0;

// 如果枚举结果不对,继续执行
while(!rightFind){
            numOfPeach++;

            num = numOfPeach;

//根据N天数循环执行N-1次
for(int i=1;i<numOfDays;i++){
                num =num/2-1;
}
if(num==1){
                rightFind=true;
break;
}
}
return numOfPeach;
}
}

【程序18】   
题目:两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定比赛名单。有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单。   
【程序19】   
题目:打印出如下图案(菱形)   
*   
***   
******   
********   
******   
***   
*   
1.程序分析:先把图形分成两部分来看待,前四行一个规律,后三行一个规律,利用双重   for循环,第一层控制行,第二层控制列。
public class PrintLinxing 
{
static void Printupstar(){
for (int x = 1; x <= 4 ;x ++){
for (int a = 4 - x; a > 0 ; a --){
System.out.print(" ");
}
for (int y = 2 * x - 1; y > 0; y --){
System.out.print("*");
}
System.out.println();
}
}

static void Printdownstar(){
for (int x = 1; x <= 3 ;x ++){
for (int a = x; a > 0 ; a --){
System.out.print(" ");
}
for (int y = 2 * (4 - x) - 1; y > 0; y --){
System.out.print("*");
}
System.out.println();
}
}
public static void main(String[] args) 
{
Printupstar();
Printdownstar();
}
}  
【程序20】   
题目:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和。   
1.程序分析:请抓住分子与分母的变化规律。 
import java.util.*;
public class Test4

   public static void main(String[] args)
   {     
 int i = 3;
         int sum = 0;
        int[] f = new int[20];
int[] t = new int[20];
f[0] = 2;
f[1] = 3;
t[0] = 1;
t[1] =2;
   while ( i < 20)
   {  
f[i] = f[i - 1] + f[i - 2];
t[i] = t[i - 1] + t[i - 2];
sum = sum +  f[i]/t[i];
i++;
   }  
/* for  (int molecute : t )
{   
System.out.println(molecute);
}
*/
               sum = sum + f[1]/t[1] +f[0]/t[0];
   System.out.println("2/1 + 3/2 + 5/3 + 8/5 +13/8 + ... 前二十项和的值是:"+sum);
   }
}  

#2


【程序21】   
题目:求1+2!+3!+...+20!的和   
1.程序分析:此程序只是把累加变成了累乘。 
import java.util.*;

public class TestMulPlus 
{  static int sum = 0;
static int Multi(int x){

if (x == 1)
{
x = 1;
}else{
x = x * Multi( x - 1);
}

return x;
}

static int MulPlus(int a){


for (int y = 1 ; y <= a ; y++ )
{
sum += Multi(y);
}
return sum;
}
public static void main(String[] args) 
{
int i = 0;
System.out.println("请输入你要进行累加乘的数字:");
Scanner in = new Scanner(System.in);
i = in.nextInt();

System.out.println(MulPlus(i));
}
}
  
【程序22】   
题目:利用递归方法求5!。   
1.程序分析:递归公式:fn=fn_1*4!   
class TestJieCheng 
{
static int Factorial (int a){
 int sum;

if (a == 0)
{
sum = 1;
}else {
sum = a * Factorial (a -1);
}
return sum;
}
public static void main(String[] args) 
{
int i = 5;
int S =  Factorial (i);
System.out.println("5! = " + S);
}
}
【程序23】   
题目:有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。最后问第一个人,他说是10岁。请问第五个人多大?   
1.程序分析:利用递归的方法,递归分为回推和递推两个阶段。要想知道第五个人岁数,需知道第四人的岁数,依次类推,推到第一人(10岁),再往回推。   
import java.util.*;

public class  TestAgeQ
{ static int count = 0;
 static int  Recursive(int R ){           //递归
int age = 0;

if (R== 1)
{
age = 10;
}else{
age = Recursive (R - 1 ) + 2;
}

return age;
}

 static int Recurrence (int R ,int fa){             //递推
int age = fa;
while (R >1)
{
age += 2;
R --;
}
return age;
 }
public static void main(String[] args) 
{ int ina = 0;
Scanner in = new Scanner(System.in);
System.out.println("请输入有多少个人:");
ina = in.nextInt();

System.out.println("第五个人的年龄是:"+Recursive(ina));
System.out.println("第五个人的年龄是:"+Recurrence (ina , 10));
}
}
【程序24】   
题目:给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。  
import java.util.*;

public class TestNum {

public static void main(String[] args) {
int i = 0;
System.out.println("pelease , input you will test num:");
Scanner in = new Scanner(System.in);
i = in.nextInt();
Integer a = (Integer)i;
String s = a.toString();
if(s.length() > 5){
System.out.println("your input num is error, please reinput!!");

}else{
System.out.println("your enter the  bytes of num is:" + s.length());

char[] ch = s.toCharArray();
for (int x = ch.length - 1; x >= 0; x --){
System.out.print(ch[x]);
}
}
}
}
 
【程序25】   
题目:一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。  
import java.util.*;

public class TestHuiWenShu 
{
public static void main(String[] args) 
{ int hws = 0;
Scanner in = new Scanner(System.in);
System.out.println("请输入你测试的回文数(一个五位的整数)");
hws = in.nextInt();

if ((hws /10000 == hws % 10 )&&  ((hws / 1000) %10 == (hws /10) % 10))
{
System.out.println(hws +" 是一个回文数。");
}else{
System.out.println(hws +" 不是一个回文数。");
}
}

【程序26】   
题目:请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续   判断第二个字母。   
1.程序分析:用情况语句比较好,如果第一个字母一样,则判断用情况语句或if语句判断第二个字母。   

import java.io.*;

public  class TestWeek 
{
public static void main(String[] args)  throws Exception
{  char c;
System.out.println("请输入星期几的第一个字母(要大写):");
 c = (char)new BufferedReader(new InputStreamReader(System.in)).read();

if (c == 'M')
{
System.out.println("你所输入的是周一");

}else if( c =='T'){
System.out.println("请输入第二个字母:");
 c = (char)new BufferedReader(new InputStreamReader(System.in)).read();
if (c =='u')
{
System.out.println("你所输入的是星期二");
}else {
if (c == 'h')
System.out.println("你所输入的是星期四");
else
System.out.println("你所输入的有误,请重新输入。");
}
}else if (c =='W'){
System.out.println("你所输入的是周三");
}else if(c == 'F'){
System.out.println("你所输入的是周五");
} else if(c == 'S'){
System.out.println("请输入第二个字母:");
 c = (char)new BufferedReader(new InputStreamReader(System.in)).read();
if (c =='a')
{
System.out.println("你所输入的是星期l六");
}else {
if (c == 'u')
System.out.println("你所输入的是星期日");
else
System.out.println("你所输入的有误,请重新输入。");
}
}
else{
System.out.println("你所输入的有误,请重新输入。");
}

}
}
【程序27】   
题目:求100之内的素数   
import java.util.*;
import java.lang.Object;

public class TestPrime
{   public static boolean isPrime(int num) {   
       for(int i = 2; i <= Math.sqrt(num); i++) {//程序默认2是素数,当j=2时,循环不执行
           if(num % i == 0) {
             return false;
           }
       }
       return true;
    }


public static void main (String args[])
{

 for(int i= 0;i<= 100;i++) {
   if(Test2.isPrime(i)) {
System.out.println(i + " is a prime!!");
   }
 }
 }
}
【程序28】   
题目:对10个数进行排序   
1.程序分析:可以利用选择法,即从后9个比较过程中,选择一个最小的与第一个元素交换,下次类推,即用第二个元素与后8个进行比较,并进行交换。
 public class xunZhePaixu
{
public static void main(String[] args) 
{
int [] xzpx = {93,54,63,12,32,34,23,36,42,74};
int min = 0;


System.out.println("原来的数字的顺序:");
for (int i = 0; i < xzpx.length ; i ++ ){

System.out.print(xzpx[i] + "  ");
}
for (int x = 0; x < xzpx.length; x ++){
for (int y = x + 1; y < xzpx.length ;y ++ ){
if (xzpx[x] > xzpx[y]){
min = xzpx[x];
xzpx[x] = xzpx[y];
xzpx[y] = min;
}
}
}
System.out.println();
System.out.println("排序后的数字的顺序:");
for (int i = 0; i < xzpx.length ; i ++ ){

System.out.print(xzpx[i] + "  ");
}
}
}
 
【程序29】   
题目:求一个3*3矩阵对角线元素之和   
1.程序分析:利用双重for循环控制输入二维数组,再将a[i][i]累加后输出。
public class TestDiagonal{
public static void main(String[] args) {
int [][] b = new int[3][3];
int sum = 0;

for (int i = 0; i < b.length; i++){
for (int j = 0; j < b[i].length ; j++ ){
b[i][j] = j;
}
}

for (int a = 0; a < b.length ; a ++){
sum += b[a][a];
}

System.out.println("the sum of :" + sum);
}
}   
【程序30】   
题目:有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。   
1.   程序分析:首先判断此数是否大于最后一个数,然后再考虑插入中间的数的情况,插入后此元素之后的数,依次后移一个位置。   
【程序31】   
题目:将一个数组逆序输出。   
1.程序分析:用第一个与最后一个交换。   
public class TestNixu {
public static void main(String[] args) {
System.out.println("Hello World!");
int[] in = {23, 6, 74, 72, 35, 8,  16};
System.out.println("排序之前:");

for (int i = 0 ; i < in.length; i ++){
System.out.print(in [i] + "  ");
}

for (int i = 0 ; i < in.length/2; i ++){
int temp = 0;
temp = in [i];
in [i] = in [in.length - i - 1];
in [in.length - i - 1] = temp;
}

System.out.println("排序之后:");

for (int i = 0 ; i < in.length; i ++){
System.out.print(in [i] + "  ");
}
}
}

#3


【程序32】   
题目:取一个整数a从右端开始的4~7位。   
程序分析:可以这样考虑:   
(1)先使a右移4位。   
(2)设置一个低4位全为1,其余全为0的数。可用~(~0 < <4)   
(3)将上面二者进行&运算。   
import java.util.*;
public class Test32{
public static void main(String[] args){
   Scanner sc=new Scanner(System.in);
   System.out.print("请输入一个至少7位的整数:");
   int a=sc.nextInt();
   
   String str=Integer.toString(a);
   char[] ch=str.toCharArray();
   int len=ch.length;
   if(len<7){
      System.out.println("输入整数小于7位!!");
   }
   else{
      System.out.println("截取的4~7位数字为:"+ch[len-4]+ch[len-5]+ch[len-6]+ch[len-7]);
   }
   
}
}
// http://houhuan0506.blog.163.com/blog/static/119427802010229013814/
我觉得程序中不用将其转换为字符数组
在判断中可以直接在else 后面用一个循环
for(int i = str.lenth - 4; i > str,length – 7; i --){
System.out.print(str[i]);
}
【程序33】   
题目:打印出杨辉三角形(要求打印出10行如下图)   
1.程序分析:   
1   
1   1   
1   2   1   
1   3   3   1   
1   4   6   4   1   
1   5   10   10   5   1   
//Yhsanjiao.java: 
//http://zhidao.baidu.com/question/26468181.html?fr=qrl
public class Yhsanjiao{ 

static public void main(String[] args){ 
int[][] a=new int[10][10]; 
for(int i=0;i<10;i++) 
for(int j=0;j<10;j++) 

if (j<i) 

a[i][j]=1; 
if(j==0){ 
a[i][j]=1; 
}else{ 
a[i][j]=a[i-1][j-1]+a[i-1][j]; 

}else{ 
a[i][j]=1; 



for(int i=0;i<10;i++) { 
for(int k=1;k<=10-i;k++) 
System.out.printf(" "); 

for(int j=0;j<=i;j++){ 
System.out.printf("%3d ",a[i][j]); 

System.out.printf("\n"); 


}
【程序34】   
题目:输入3个数a,b,c,按大小顺序输出。   
1.程序分析:利用指针方法。  
public class Test {
    public static void main(String[] args) {
        System.out.print("请输入三个数,用空格分开:");
        Scanner sc = new Scanner(System.in);
        int[] a = new int[3];
        for (int i = 0; i < 3; i++) {
            a[i] = sc.nextInt();
        }
        int temp = 0;
        if (a[0] < a[1]) {
            temp = a[0];
            a[0] = a[1];
            a[1] = temp;
        }
        if (a[1] < a[2]) {
            temp = a[1];
            a[1] = a[2];
            a[2] = temp;
        }
        if (a[0] < a[1]) {
            temp = a[0];
            a[0] = a[1];
            a[1] = temp;
        }
        System.out.println("从大到小为:" + a[0] + " " + a[1] + " " + a[2]);
    }
}
//java 中没有指针如果是用链表实现就更有意思等待。。。。。。。。 
【程序35】   
题目:输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组。   
public class TestTransformMinAndMax {
public static void main(String[] args) {
System.out.println("Hello World!");
int[] in = {23, 6, 74, 72, 35, 8,  16};
int max = 0, min = 0;
max = in[0];
min = in[0];
System.out.println("排序之前:");

for (int i = 0 ; i < in.length; i ++){
System.out.print(in [i] + "  ");
}

for (int i = 1 ; i < in.length; i ++){//取出最小 ,大数
int temp = 0;
if (max < in[i]) {
temp = max;
max = in [i];
in[i] = temp;
}
if (min  > in[i]) {
temp = min;
min = in[i];
in[i] = temp;
}
}

in[0] =max;
in[in.length - 1] = min;

System.out.println("排序之后:");

for (int i = 0 ; i < in.length; i ++){
System.out.print(in [i] + "  ");
}
}
}
【程序36】   
题目:有n个整数,使其前面各数顺序向后移m个位置,最后m个数变成最前面的m个数   
public class TestNumMove{
public static void main(String[] args){
System.out.println("Hello World!");

int i = 5195623;
System.out.println(" Before   " +i);
String s = Integer.toString( i);

String s1 = s.substring( s.length() - 4 ,s.length());
String s2 = s.substring( 0 ,s.length() - 4 );

s = s1.concat(s2);
System.out.println("After      "+Integer.parseInt(s));
}
}
【程序37】   
题目:有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。   
public class TestCircue
{
public static void main (String args[]){
boolean[] b = new boolean [500];
int index = 0;
int leftnum = b.length;
int countnum = 0;

for (int i = 0 ; i < b.length ; i ++)
{
b[i] = true;
}

while(leftnum > 1){
if ( b [index] == true)
{

countnum ++;
if ( countnum == 3)
{
b[index] = false;
countnum = 0;
leftnum --;
}
}
index ++;
if ( index == b.length)
{
index = 0;
}
}

for (int a = 0; a < b.length ; a ++ )
{
if (b[a] == true)
{
System.out.println(a);
}
}
}
}
//程序中假设有500百个人围成一圈

【程序38】   
题目:写一个函数,求一个字符串的长度,在main函数中输入字符串,并输出其长度。   
import java.io.*;

public class TestStringlength {
public static void main(String[] args) {
String s = null;
System.out.println("Hello World!");
System.out.println("请输入要测试的字符串:");
try{
InputStreamReader isr = new InputStreamReader(System.in);
        BufferedReader br= new BufferedReader(isr);
 s = br.readLine();
    
}catch (IOException e) {
e.printStackTrace();
}


//开始测试
 System.out.println("你所输入的字符串是:" + s + "它的长度是:" + s.length());

}
}
【程序39】   
题目:编写一个函数,输入n为偶数时,调用函数求1/2+1/4+...+1/n,当输入n为奇数时,调用函数1/1+1/3+...+1/n(利用指针函数)  
import java.util.*;

public class TestOddAndEvenMulplus {
static double sum = 0;
/*static int Multi(int x){

if (x == 1)
{
x = 1;
}else{
x = x * Multi( x - 1);
}

return x;
}*/

static double MulPlus(double a){

if(a % 2.0 == 1){
for (double y = 1.0 ; y <= a ; y++ )
{
sum += 1/ y;
y ++;
}
}else{
for (double y = 1.0 ; y <= a ; y++ )
{
sum += 1/ y;
y ++;
}
}
return sum;
}
public static void main(String[] args) 
{
double i = 0;
System.out.println("请输入你要进行累加乘的数字:");
Scanner in = new Scanner(System.in);
i = in.nextDouble();
System.out.println(MulPlus(i));

}
}
 
【程序40】   
题目:字符串排序。   
import java.util.*;
public class TestStringSqence {
 public static void main(String[] args) {
  String ss[]={"ab","wang","hi","a","abff"};
  MyString mySs[]=new MyString[ss.length];//创建自定义排序的数组
  for (int i = 0; i < ss.length; i++) {
   mySs[i]=new MyString(ss[i]);
  }
  Arrays.sort(mySs);//排序
  for (int i = 0; i < mySs.length; i++) {
   System.out.println(mySs[i].s);
  }
}

}


class MyString implements Comparable<MyString>{
 public String s;//包装String
 
 public MyString(String s) {
  this.s = s;
 }

 @Override
 public int compareTo(MyString o) {
  if(o==null||o.s==null) return 1;
  if(s.length()>o.s.length()) return 1;
  else if(s.length()<o.s.length()) return -1;
  return s.compareTo(o.s);
 }
}
//http://zhidao.baidu.com/question/153764937.html?push=ql
【程序41】   
题目:海滩上有一堆桃子,五只猴子来分。第一只猴子把这堆桃子凭据分为五份,多了一个,这只猴子把多的一个扔入海中,拿走了一份。第二只猴子把剩下的桃子又平均分成五份,又多了一个,它同样把多的一个扔入海中,拿走了一份,第三、第四、第五只猴子都是这样做的,问海滩上原来最少有多少个桃子?   
//当第五只猴子只拿到一个桃子时就是海滩原来有最少有多少个桃子与程序17相似

【程序42】   
题目:809*??=800*??+9*??+1   其中??代表的两位数,8*??的结果为两位数,9*??的结果为3位数。求??代表的两位数,及809*??后的结果。   
public class Test42{

public static void main(String[] args){
    int x=0;
    boolean flag=false;
    for(int i=10;i<100;i++){
       if(809*i==800*i+9*i+1)
       {
          flag=true;
          x=i;
          break;
       }

    }
    if(flag)
    {
       System.out.print("这个两位数是"+x);
       System.out.print("809*??的结果是:"+809*x);
    }
    else
      System.out.print("无符合要求的数");

}
}
// 来自http://houhuan0506.blog.163.com/blog/static/119427802010364523672/

#4


无聊做了第一题

public class Test1 {
public static void main(String[] args) {
getSum(10);
}

static void getSum(int n){
for(int i = 1;i <= n;i++)
System.out.printf("第 %d 月有 %d 对兔子\n",i,doGetSum(i));
}

static int doGetSum(int n){
return  (n == 1 | n == 2) ? 1 : doGetSum(n - 1) + doGetSum(n - 2);
}
}

#1


【程序11】   
题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?   
1.程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去   掉不满足条件的排列
。   

public class Subject11 {
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&&i!=k&&j!=k)
      {
       count++;
       System.out.println(i*100+j*10+k);
      }
     }
    }
   }
   System.out.println("由1,2,3,4共可以组成"+count+"个互不相同且无重复数字的三位数!");
}
}
//来自http://hi.baidu.com/fairytalesh/blog/item/160f3c17fcb5b058f3de320a.html
【程序12】   
题目:企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数?   
1.程序分析:请利用数轴来分界,定位。注意定义时需把奖金定义成长整型。   
import java.util.*;
public class Test4

   public static void main(String[] args)
   {
     long reward;
 Scanner in = new Scanner(System.in);
 System.out.println("输入当月利润 :");
 reward = in.nextLong();
 double b ;
 long a = reward;
     if (a <= 10000 && a > 0){

 b =(long) a * 10/100;
 System.out.println("你可以获得奖金 :" + b);
     }
 else if (a > 100000 && a <= 200000){
 b = (long)  (a - 100000) * 7.75/100 + (100000 * 10/100);
        System.out.println("你可以获得奖金 :" + b );
  }
  else if (a > 200000 && a <= 400000){
  b = (long) (a - 200000) * 5/100 + (100000 * 7.5/100) + (100000 * 10/100);
        System.out.println("你可以获得奖金 :" + b );
  }
   else if (a > 400000 && a <= 600000){
   b = (long) (a - 400000) * 3/100 +(200000 * 5/100) +(200000 * 7.5/100) + (100000 * 10/100);
        System.out.println("你可以获得奖金 :" + b );
  }
  else if (a > 600000 && a <= 1000000){
  b = (long) (a - 600000) * 1.5/100 +(200000 * 5/100) +(200000 * 3/100)+(200000 * 7.5/100) + (100000 * 10/100);
        System.out.println("你可以获得奖金 :" + b );
  }
    else if (a > 1000000 ){
b = (long) (a - 1000000) * 1.5/100 +(200000 * 5/100) +(400000 * 1.5/100) +(200000 * 3/100)+(200000 * 7.5/100) + (100000 * 10/100);
        System.out.println("你可以获得奖金 :" + b);
  }
   else {

System.out.println("你的输入有错误 :");
}
   }
}
【程序13】   
题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?   
1.程序分析:在10万以内判断,先将该数加上100后再开方,再将该数加上268后再开方,如果开方后的结果满足如下条件,即是结果。请看具体分析:   
public class TestFullSqrt 
{
public static void main(String[] args) 
{
for (long i = 1 ; i < 100000; i ++ )
{
if ( Math.sqrt(i + 100) % 1 == 0 && Math.sqrt(i + 268) % 1 == 0)
{
System.out.println(i + "满足加上100后是一个完全平方数,再加上168又是一个完全平方数");
}
}
}
}
【程序14】   
题目:输入某年某月某日,判断这一天是这一年的第几天?   
1.程序分析:以3月5日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天,特殊情况,闰年且输入月份大于3时需考虑多加一天。   
import java.util.*;
public class TestCommonNum
{ static long a = 0,b =0 ,c =0;
public static void main(String[] args) {
System.out.println("please input two numbers :");
Scanner in = new Scanner(System.in);
System.out.println("first number:");
a = in.nextLong();
System.out.println("fsecond number:");
b = in.nextLong();
System.out.println("gongyueshu " +commonMul( a ,b));

System.out.println("gongbeishu " +a * b / commonMul( a ,b));
}

public static long commonMul(long x ,long y){
if (x < y) {
long temp =0;
temp = x;
x = y;
y = temp;
}

do
{
c = x % y;
x = y;
y = c; 
}
while (c != 0);
return x;
}
}
【程序15】   
题目:输入三个整数x,y,z,请把这三个数由小到大输出。   
1.程序分析:我们想办法把最小的数放到x上,先将x与y进行比较,如果x> y则将x与y的值进行交换,然后再用x与z进行比较,如果x> z则将x与z的值进行交换,这样能使x最小。   
import java.util.*;
public class Test4

   public static void main(String[] args)
   {      int x;
          int y;
          int z;
  Scanner in = new Scanner(System.in);
  System.out.print( "请输入x的值 :");
  x = in.nextInt();
  System.out.print("请输入y的值 :");
   y = in.nextInt();
System.out.print("请输入z的值 :");
z = in.nextInt();
         System.out.print("x ,y , z 从小到大的顺序是:");
if ( x < y)
{  if ( x < z){  
    if (y < z){
System.out.println(x +" " + y + " "  + z);
}else{
    System.out.println(x +" " + z + " " + y);
}
   }else {
        System.out.println(z +" " + x +" " + y);
   }
}else{
int temp = x;
x = y;
y = temp;
    if (y < z){
System.out.println(x +" " + y + " " + z);
            }else{
 if ( z < x)
 {
 System.out.println(z +" " + x + " " + y);
                 }else
       System.out.println(x +" " + z +" "  + y);
}
}
   }
}
【程序16】   
题目:输出9*9口诀。   
1.程序分析:分行与列考虑,共9行9列,i控制行,j控制列。
public class Test4
{  
public static void main(String[] args){

          for (int j = 1;  j <= 9 ;  j++)  {
               for (int i = 1; i <= j  ; i++){
   System.out.print( i + "x" + j + "=" + i * j + "\t");
    }
 System.out.println();   
            }   
【程序17】   
题目:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个   第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下   的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。   
1.程序分析:采取逆向思维的方法,从后往前推断。 
import java.util.*;
public class Test4

   public static void main(String[] args)
   {  int Peach = 1;
         
       for (int i = 0; i < 10 ; i ++ )
        {  
   Peach = 2 * Peach + 1;
        }
System.out.println ("猴子所摘的桃子总的有 :" + Peach + "个。");
   }
}  //这是我自己写的后来在网上发现还有更好的大家可以看一下

import java.io.IOException;
/**
 * 测试用类
 * @author sunt
 */
public class GetPeach{
 
/**
     * 主函数
     * @param args
     * @throws IOException
     */
public static void main(String[] args) throws IOException {
        System.out.println(getNumOfPeachFirstDay(10));

}
 
/**
     * 根据天数计算第一天总共摘了多少桃子
         * @param numOfDays 总天数
     * @return 第一天总共摘的桃子数
     */
public static int getNumOfPeachFirstDay(int numOfDays) {
if (numOfDays < 1) {
throw new RuntimeException("NumOfDays must more than zero!");

}
if (numOfDays == 1) {
return 1;

}
return (getNumOfPeachFirstDay(numOfDays - 1) + 1) * 2;

}
}

这是递归,按程序角度是顺着执行,但按楼主角度严格意义上可能还不是顺着做。如果真要严格按题意非思考性的硬找可以用枚举。
import java.io.IOException;
/**

 * 测试用类

 * @author sunt

 */
public class GetPeach{
 /**
     * 主函数
     * @param args
     * @throws IOException
     */
public static void main(String[] args) throws IOException {
        System.out.println(getNumOfPeachFirstDay(10));
}
 
/**
     * 根据桃子数枚举,看最后一天是否是1个桃子。
     * 
     * @param numOfDays 总天数
     * @return 第一天总共摘的桃子数
     */
public static int getNumOfPeachFirstDay(int numOfDays) {
boolean rightFind = false;
int numOfPeach = 0;
int num = 0;

// 如果枚举结果不对,继续执行
while(!rightFind){
            numOfPeach++;

            num = numOfPeach;

//根据N天数循环执行N-1次
for(int i=1;i<numOfDays;i++){
                num =num/2-1;
}
if(num==1){
                rightFind=true;
break;
}
}
return numOfPeach;
}
}

【程序18】   
题目:两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定比赛名单。有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单。   
【程序19】   
题目:打印出如下图案(菱形)   
*   
***   
******   
********   
******   
***   
*   
1.程序分析:先把图形分成两部分来看待,前四行一个规律,后三行一个规律,利用双重   for循环,第一层控制行,第二层控制列。
public class PrintLinxing 
{
static void Printupstar(){
for (int x = 1; x <= 4 ;x ++){
for (int a = 4 - x; a > 0 ; a --){
System.out.print(" ");
}
for (int y = 2 * x - 1; y > 0; y --){
System.out.print("*");
}
System.out.println();
}
}

static void Printdownstar(){
for (int x = 1; x <= 3 ;x ++){
for (int a = x; a > 0 ; a --){
System.out.print(" ");
}
for (int y = 2 * (4 - x) - 1; y > 0; y --){
System.out.print("*");
}
System.out.println();
}
}
public static void main(String[] args) 
{
Printupstar();
Printdownstar();
}
}  
【程序20】   
题目:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和。   
1.程序分析:请抓住分子与分母的变化规律。 
import java.util.*;
public class Test4

   public static void main(String[] args)
   {     
 int i = 3;
         int sum = 0;
        int[] f = new int[20];
int[] t = new int[20];
f[0] = 2;
f[1] = 3;
t[0] = 1;
t[1] =2;
   while ( i < 20)
   {  
f[i] = f[i - 1] + f[i - 2];
t[i] = t[i - 1] + t[i - 2];
sum = sum +  f[i]/t[i];
i++;
   }  
/* for  (int molecute : t )
{   
System.out.println(molecute);
}
*/
               sum = sum + f[1]/t[1] +f[0]/t[0];
   System.out.println("2/1 + 3/2 + 5/3 + 8/5 +13/8 + ... 前二十项和的值是:"+sum);
   }
}  

#2


【程序21】   
题目:求1+2!+3!+...+20!的和   
1.程序分析:此程序只是把累加变成了累乘。 
import java.util.*;

public class TestMulPlus 
{  static int sum = 0;
static int Multi(int x){

if (x == 1)
{
x = 1;
}else{
x = x * Multi( x - 1);
}

return x;
}

static int MulPlus(int a){


for (int y = 1 ; y <= a ; y++ )
{
sum += Multi(y);
}
return sum;
}
public static void main(String[] args) 
{
int i = 0;
System.out.println("请输入你要进行累加乘的数字:");
Scanner in = new Scanner(System.in);
i = in.nextInt();

System.out.println(MulPlus(i));
}
}
  
【程序22】   
题目:利用递归方法求5!。   
1.程序分析:递归公式:fn=fn_1*4!   
class TestJieCheng 
{
static int Factorial (int a){
 int sum;

if (a == 0)
{
sum = 1;
}else {
sum = a * Factorial (a -1);
}
return sum;
}
public static void main(String[] args) 
{
int i = 5;
int S =  Factorial (i);
System.out.println("5! = " + S);
}
}
【程序23】   
题目:有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。最后问第一个人,他说是10岁。请问第五个人多大?   
1.程序分析:利用递归的方法,递归分为回推和递推两个阶段。要想知道第五个人岁数,需知道第四人的岁数,依次类推,推到第一人(10岁),再往回推。   
import java.util.*;

public class  TestAgeQ
{ static int count = 0;
 static int  Recursive(int R ){           //递归
int age = 0;

if (R== 1)
{
age = 10;
}else{
age = Recursive (R - 1 ) + 2;
}

return age;
}

 static int Recurrence (int R ,int fa){             //递推
int age = fa;
while (R >1)
{
age += 2;
R --;
}
return age;
 }
public static void main(String[] args) 
{ int ina = 0;
Scanner in = new Scanner(System.in);
System.out.println("请输入有多少个人:");
ina = in.nextInt();

System.out.println("第五个人的年龄是:"+Recursive(ina));
System.out.println("第五个人的年龄是:"+Recurrence (ina , 10));
}
}
【程序24】   
题目:给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。  
import java.util.*;

public class TestNum {

public static void main(String[] args) {
int i = 0;
System.out.println("pelease , input you will test num:");
Scanner in = new Scanner(System.in);
i = in.nextInt();
Integer a = (Integer)i;
String s = a.toString();
if(s.length() > 5){
System.out.println("your input num is error, please reinput!!");

}else{
System.out.println("your enter the  bytes of num is:" + s.length());

char[] ch = s.toCharArray();
for (int x = ch.length - 1; x >= 0; x --){
System.out.print(ch[x]);
}
}
}
}
 
【程序25】   
题目:一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。  
import java.util.*;

public class TestHuiWenShu 
{
public static void main(String[] args) 
{ int hws = 0;
Scanner in = new Scanner(System.in);
System.out.println("请输入你测试的回文数(一个五位的整数)");
hws = in.nextInt();

if ((hws /10000 == hws % 10 )&&  ((hws / 1000) %10 == (hws /10) % 10))
{
System.out.println(hws +" 是一个回文数。");
}else{
System.out.println(hws +" 不是一个回文数。");
}
}

【程序26】   
题目:请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续   判断第二个字母。   
1.程序分析:用情况语句比较好,如果第一个字母一样,则判断用情况语句或if语句判断第二个字母。   

import java.io.*;

public  class TestWeek 
{
public static void main(String[] args)  throws Exception
{  char c;
System.out.println("请输入星期几的第一个字母(要大写):");
 c = (char)new BufferedReader(new InputStreamReader(System.in)).read();

if (c == 'M')
{
System.out.println("你所输入的是周一");

}else if( c =='T'){
System.out.println("请输入第二个字母:");
 c = (char)new BufferedReader(new InputStreamReader(System.in)).read();
if (c =='u')
{
System.out.println("你所输入的是星期二");
}else {
if (c == 'h')
System.out.println("你所输入的是星期四");
else
System.out.println("你所输入的有误,请重新输入。");
}
}else if (c =='W'){
System.out.println("你所输入的是周三");
}else if(c == 'F'){
System.out.println("你所输入的是周五");
} else if(c == 'S'){
System.out.println("请输入第二个字母:");
 c = (char)new BufferedReader(new InputStreamReader(System.in)).read();
if (c =='a')
{
System.out.println("你所输入的是星期l六");
}else {
if (c == 'u')
System.out.println("你所输入的是星期日");
else
System.out.println("你所输入的有误,请重新输入。");
}
}
else{
System.out.println("你所输入的有误,请重新输入。");
}

}
}
【程序27】   
题目:求100之内的素数   
import java.util.*;
import java.lang.Object;

public class TestPrime
{   public static boolean isPrime(int num) {   
       for(int i = 2; i <= Math.sqrt(num); i++) {//程序默认2是素数,当j=2时,循环不执行
           if(num % i == 0) {
             return false;
           }
       }
       return true;
    }


public static void main (String args[])
{

 for(int i= 0;i<= 100;i++) {
   if(Test2.isPrime(i)) {
System.out.println(i + " is a prime!!");
   }
 }
 }
}
【程序28】   
题目:对10个数进行排序   
1.程序分析:可以利用选择法,即从后9个比较过程中,选择一个最小的与第一个元素交换,下次类推,即用第二个元素与后8个进行比较,并进行交换。
 public class xunZhePaixu
{
public static void main(String[] args) 
{
int [] xzpx = {93,54,63,12,32,34,23,36,42,74};
int min = 0;


System.out.println("原来的数字的顺序:");
for (int i = 0; i < xzpx.length ; i ++ ){

System.out.print(xzpx[i] + "  ");
}
for (int x = 0; x < xzpx.length; x ++){
for (int y = x + 1; y < xzpx.length ;y ++ ){
if (xzpx[x] > xzpx[y]){
min = xzpx[x];
xzpx[x] = xzpx[y];
xzpx[y] = min;
}
}
}
System.out.println();
System.out.println("排序后的数字的顺序:");
for (int i = 0; i < xzpx.length ; i ++ ){

System.out.print(xzpx[i] + "  ");
}
}
}
 
【程序29】   
题目:求一个3*3矩阵对角线元素之和   
1.程序分析:利用双重for循环控制输入二维数组,再将a[i][i]累加后输出。
public class TestDiagonal{
public static void main(String[] args) {
int [][] b = new int[3][3];
int sum = 0;

for (int i = 0; i < b.length; i++){
for (int j = 0; j < b[i].length ; j++ ){
b[i][j] = j;
}
}

for (int a = 0; a < b.length ; a ++){
sum += b[a][a];
}

System.out.println("the sum of :" + sum);
}
}   
【程序30】   
题目:有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。   
1.   程序分析:首先判断此数是否大于最后一个数,然后再考虑插入中间的数的情况,插入后此元素之后的数,依次后移一个位置。   
【程序31】   
题目:将一个数组逆序输出。   
1.程序分析:用第一个与最后一个交换。   
public class TestNixu {
public static void main(String[] args) {
System.out.println("Hello World!");
int[] in = {23, 6, 74, 72, 35, 8,  16};
System.out.println("排序之前:");

for (int i = 0 ; i < in.length; i ++){
System.out.print(in [i] + "  ");
}

for (int i = 0 ; i < in.length/2; i ++){
int temp = 0;
temp = in [i];
in [i] = in [in.length - i - 1];
in [in.length - i - 1] = temp;
}

System.out.println("排序之后:");

for (int i = 0 ; i < in.length; i ++){
System.out.print(in [i] + "  ");
}
}
}

#3


【程序32】   
题目:取一个整数a从右端开始的4~7位。   
程序分析:可以这样考虑:   
(1)先使a右移4位。   
(2)设置一个低4位全为1,其余全为0的数。可用~(~0 < <4)   
(3)将上面二者进行&运算。   
import java.util.*;
public class Test32{
public static void main(String[] args){
   Scanner sc=new Scanner(System.in);
   System.out.print("请输入一个至少7位的整数:");
   int a=sc.nextInt();
   
   String str=Integer.toString(a);
   char[] ch=str.toCharArray();
   int len=ch.length;
   if(len<7){
      System.out.println("输入整数小于7位!!");
   }
   else{
      System.out.println("截取的4~7位数字为:"+ch[len-4]+ch[len-5]+ch[len-6]+ch[len-7]);
   }
   
}
}
// http://houhuan0506.blog.163.com/blog/static/119427802010229013814/
我觉得程序中不用将其转换为字符数组
在判断中可以直接在else 后面用一个循环
for(int i = str.lenth - 4; i > str,length – 7; i --){
System.out.print(str[i]);
}
【程序33】   
题目:打印出杨辉三角形(要求打印出10行如下图)   
1.程序分析:   
1   
1   1   
1   2   1   
1   3   3   1   
1   4   6   4   1   
1   5   10   10   5   1   
//Yhsanjiao.java: 
//http://zhidao.baidu.com/question/26468181.html?fr=qrl
public class Yhsanjiao{ 

static public void main(String[] args){ 
int[][] a=new int[10][10]; 
for(int i=0;i<10;i++) 
for(int j=0;j<10;j++) 

if (j<i) 

a[i][j]=1; 
if(j==0){ 
a[i][j]=1; 
}else{ 
a[i][j]=a[i-1][j-1]+a[i-1][j]; 

}else{ 
a[i][j]=1; 



for(int i=0;i<10;i++) { 
for(int k=1;k<=10-i;k++) 
System.out.printf(" "); 

for(int j=0;j<=i;j++){ 
System.out.printf("%3d ",a[i][j]); 

System.out.printf("\n"); 


}
【程序34】   
题目:输入3个数a,b,c,按大小顺序输出。   
1.程序分析:利用指针方法。  
public class Test {
    public static void main(String[] args) {
        System.out.print("请输入三个数,用空格分开:");
        Scanner sc = new Scanner(System.in);
        int[] a = new int[3];
        for (int i = 0; i < 3; i++) {
            a[i] = sc.nextInt();
        }
        int temp = 0;
        if (a[0] < a[1]) {
            temp = a[0];
            a[0] = a[1];
            a[1] = temp;
        }
        if (a[1] < a[2]) {
            temp = a[1];
            a[1] = a[2];
            a[2] = temp;
        }
        if (a[0] < a[1]) {
            temp = a[0];
            a[0] = a[1];
            a[1] = temp;
        }
        System.out.println("从大到小为:" + a[0] + " " + a[1] + " " + a[2]);
    }
}
//java 中没有指针如果是用链表实现就更有意思等待。。。。。。。。 
【程序35】   
题目:输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组。   
public class TestTransformMinAndMax {
public static void main(String[] args) {
System.out.println("Hello World!");
int[] in = {23, 6, 74, 72, 35, 8,  16};
int max = 0, min = 0;
max = in[0];
min = in[0];
System.out.println("排序之前:");

for (int i = 0 ; i < in.length; i ++){
System.out.print(in [i] + "  ");
}

for (int i = 1 ; i < in.length; i ++){//取出最小 ,大数
int temp = 0;
if (max < in[i]) {
temp = max;
max = in [i];
in[i] = temp;
}
if (min  > in[i]) {
temp = min;
min = in[i];
in[i] = temp;
}
}

in[0] =max;
in[in.length - 1] = min;

System.out.println("排序之后:");

for (int i = 0 ; i < in.length; i ++){
System.out.print(in [i] + "  ");
}
}
}
【程序36】   
题目:有n个整数,使其前面各数顺序向后移m个位置,最后m个数变成最前面的m个数   
public class TestNumMove{
public static void main(String[] args){
System.out.println("Hello World!");

int i = 5195623;
System.out.println(" Before   " +i);
String s = Integer.toString( i);

String s1 = s.substring( s.length() - 4 ,s.length());
String s2 = s.substring( 0 ,s.length() - 4 );

s = s1.concat(s2);
System.out.println("After      "+Integer.parseInt(s));
}
}
【程序37】   
题目:有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。   
public class TestCircue
{
public static void main (String args[]){
boolean[] b = new boolean [500];
int index = 0;
int leftnum = b.length;
int countnum = 0;

for (int i = 0 ; i < b.length ; i ++)
{
b[i] = true;
}

while(leftnum > 1){
if ( b [index] == true)
{

countnum ++;
if ( countnum == 3)
{
b[index] = false;
countnum = 0;
leftnum --;
}
}
index ++;
if ( index == b.length)
{
index = 0;
}
}

for (int a = 0; a < b.length ; a ++ )
{
if (b[a] == true)
{
System.out.println(a);
}
}
}
}
//程序中假设有500百个人围成一圈

【程序38】   
题目:写一个函数,求一个字符串的长度,在main函数中输入字符串,并输出其长度。   
import java.io.*;

public class TestStringlength {
public static void main(String[] args) {
String s = null;
System.out.println("Hello World!");
System.out.println("请输入要测试的字符串:");
try{
InputStreamReader isr = new InputStreamReader(System.in);
        BufferedReader br= new BufferedReader(isr);
 s = br.readLine();
    
}catch (IOException e) {
e.printStackTrace();
}


//开始测试
 System.out.println("你所输入的字符串是:" + s + "它的长度是:" + s.length());

}
}
【程序39】   
题目:编写一个函数,输入n为偶数时,调用函数求1/2+1/4+...+1/n,当输入n为奇数时,调用函数1/1+1/3+...+1/n(利用指针函数)  
import java.util.*;

public class TestOddAndEvenMulplus {
static double sum = 0;
/*static int Multi(int x){

if (x == 1)
{
x = 1;
}else{
x = x * Multi( x - 1);
}

return x;
}*/

static double MulPlus(double a){

if(a % 2.0 == 1){
for (double y = 1.0 ; y <= a ; y++ )
{
sum += 1/ y;
y ++;
}
}else{
for (double y = 1.0 ; y <= a ; y++ )
{
sum += 1/ y;
y ++;
}
}
return sum;
}
public static void main(String[] args) 
{
double i = 0;
System.out.println("请输入你要进行累加乘的数字:");
Scanner in = new Scanner(System.in);
i = in.nextDouble();
System.out.println(MulPlus(i));

}
}
 
【程序40】   
题目:字符串排序。   
import java.util.*;
public class TestStringSqence {
 public static void main(String[] args) {
  String ss[]={"ab","wang","hi","a","abff"};
  MyString mySs[]=new MyString[ss.length];//创建自定义排序的数组
  for (int i = 0; i < ss.length; i++) {
   mySs[i]=new MyString(ss[i]);
  }
  Arrays.sort(mySs);//排序
  for (int i = 0; i < mySs.length; i++) {
   System.out.println(mySs[i].s);
  }
}

}


class MyString implements Comparable<MyString>{
 public String s;//包装String
 
 public MyString(String s) {
  this.s = s;
 }

 @Override
 public int compareTo(MyString o) {
  if(o==null||o.s==null) return 1;
  if(s.length()>o.s.length()) return 1;
  else if(s.length()<o.s.length()) return -1;
  return s.compareTo(o.s);
 }
}
//http://zhidao.baidu.com/question/153764937.html?push=ql
【程序41】   
题目:海滩上有一堆桃子,五只猴子来分。第一只猴子把这堆桃子凭据分为五份,多了一个,这只猴子把多的一个扔入海中,拿走了一份。第二只猴子把剩下的桃子又平均分成五份,又多了一个,它同样把多的一个扔入海中,拿走了一份,第三、第四、第五只猴子都是这样做的,问海滩上原来最少有多少个桃子?   
//当第五只猴子只拿到一个桃子时就是海滩原来有最少有多少个桃子与程序17相似

【程序42】   
题目:809*??=800*??+9*??+1   其中??代表的两位数,8*??的结果为两位数,9*??的结果为3位数。求??代表的两位数,及809*??后的结果。   
public class Test42{

public static void main(String[] args){
    int x=0;
    boolean flag=false;
    for(int i=10;i<100;i++){
       if(809*i==800*i+9*i+1)
       {
          flag=true;
          x=i;
          break;
       }

    }
    if(flag)
    {
       System.out.print("这个两位数是"+x);
       System.out.print("809*??的结果是:"+809*x);
    }
    else
      System.out.print("无符合要求的数");

}
}
// 来自http://houhuan0506.blog.163.com/blog/static/119427802010364523672/

#4


无聊做了第一题

public class Test1 {
public static void main(String[] args) {
getSum(10);
}

static void getSum(int n){
for(int i = 1;i <= n;i++)
System.out.printf("第 %d 月有 %d 对兔子\n",i,doGetSum(i));
}

static int doGetSum(int n){
return  (n == 1 | n == 2) ? 1 : doGetSum(n - 1) + doGetSum(n - 2);
}
}