当前位置:   article > 正文

JAVA 基础编程练习500题_java基础五百题

java基础五百题

【程序 1】 
题目: 古典问题: 有一对兔子, 从出生后第 3 个月 起每个月 都生一对兔子, 小兔子长到第三个月 后每个月 又生一对兔子, 假如兔子都不死, 问每个月 的兔子对数为多少? 
程序分析: 兔子的规律为数列1,1,2,3,5,8, 13, 21.... 做这种题目, 最好的做法就是找出规律, 跟高中的数列一样 
本题有: a[n]=a[n-1]+a[n-1],而第一第二项都知道了, 后面的值也可以求得

  1. public class Programme1 {
  2.         public static void main(String[] args) {
  3.             System. out.print("请输入你想知道的兔子数量的月 份: ");
  4.             Scanner scanner=new Scanner(System.in);
  5.             int n=scanner.nextInt();//获取输入的整数
  6.             System. out.println("第"+n+"个月 兔子总数为"+fun(n));
  7.             scanner.close();
  8.         }
  9.         //求得所需月 份的兔子的数量, 返回值为兔子的数量
  10.         private static int fun(int n){
  11.             if(n==1 | | n==2)
  12.             return 1;
  13. else
  14.             return fun(n-1)+fun(n-2);
  15.         }
  16.     }

【程序 2】
    题目: 判断 101-200 之间有多少个素数, 并输出所有素数。
    程序分析:
            * 素数是: 只能被1或本身整除的数, 如: 3, 5, 7, 11, 131. . .
           *判断素数的方法: 用一个数分别去除2到sqrt(这个数) ,
            *其实用这个数分别去除2到他本身少1的数也可以, 但是运算时间增加了
            *如果能被整除, 则表明此数不是素数, 反之是素数。
    

  1. public class Programme2 {
  2.         public static void main(String[] args) {
  3.             int sum=0;
  4.             for (int i = 100; i < 200; i++) {
  5.                 if (IsRightNum(i)) { //判断这个数是不是素数
  6.                     System. out.print(i+" ");
  7.                     sum++;
  8.                     if (sum%10==0) { //十个一行
  9.                         System. out.println();
  10.                     }
  11.                 }
  12.             }
  13.             System.out.println("素数的整数: "+sum);
  14.         }
  15.         //判断这个数是不是素数的具体代码
  16.         private static boolean IsRightNum(int i) {
  17.             for (int j = 2; j < Math.sqrt(i); j++) {
  18.                 if (i%j==0) { //如果能整除, 就说明不是素数, 可以马上中断, 继续对
  19.                     下一个数判断
  20.                     return false;
  21.                 }
  22.             }
  23.             return true;
  24.         }
  25.     }


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

   例如: 153 是一个"水仙花数", 因为 153=1 的三次方+5 的三次方+3 的三次方。
    程序分析: 利用 for 循环控制 100-999 个数, 每个数分解出个位, 十位, 百位。
    

  1. public class Programme3 {
  2.         public static void main(String[] args) {
  3.             int sum=0;//水仙花的总数
  4.             for (int i = 100; i < 1000; i++) {
  5.                 int bite=i%10; //求得个位
  6.                 int ten=i/10%10; //求得十位
  7.                 int hundred=i/100;//求得百位
  8. //如果符合水仙花条件的数打印出来
  9.                 if (i==(bite*bite*bite)+
  10.                         (ten*ten*ten)+(hundred*hundred*hundred)) {
  11.                     System. out.print(i+" ");
  12.                     sum++;
  13.                 }
  14.             }
  15.             System. out.println("总共有水仙花个数: "+sum);
  16.         }
  17.     }


【程序 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 的值, 重复执行第一步。
    

  1. public class Programme4 {
  2.         public static void main(String[] args) {
  3.             System. out.print("请输入一个你要分解的正整数: ");
  4.             Scanner scanner=new Scanner(System.in);
  5.             int input=scanner.nextInt();//获取输入的数字
  6.             System. out.println();
  7.             System. out.print(input+"=");
  8.             for (int i = 2; i < input+1; i++) {
  9.                 while(input%i==0&&input! =i) {
  10.                     input=input/i;
  11.                     System. out.print(i+"*");
  12.                 }
  13.                 if(input==i){ //上面的都不能整除, 说明这是一个质数
  14.                     System. out.print(i);
  15.                     break;
  16.                 }
  17.             }
  18.             scanner.close();
  19.         }
  20.     }


【程序 5】
    题目: 利用条件运算符的嵌套来完成此题: 学习成绩>=90 分的同学用 A 表示, 60-89 分之间的用 B 表示, 60 分以下的用 C 表示。
    程序分析: (a>b) ?a: b 这是条件运算符的基本例子。
    

  1. public class Programme5 {
  2.         public static void main(String[] args) {
  3.             System. out.println("请输入你的分数: ");
  4.             Scanner scanner=new Scanner(System.in);
  5.             int input=scanner.nextInt();//获取输入
  6. //等级判断
  7.             String belong=input>=90?"A":(input>=60?"B":"c");
  8.             System. out.println(input+"分属于: "+belong);
  9.             scanner.close();
  10.         }
  11.     }


【程序 6】
    题目: 输入两个正整数 m 和 n, 求其最大公约数和最小公倍数。
    程序分析: 利用辗除法。
  *这里有一个知识点要记住的, 最大公约数和最小公倍数的求法
*1、 先求最大公约数bigDivisor
*2、 就可以很方便获得最小公倍数multiple=input1*input2/bigDIvisor
*这里最重要的就是求最大公约数: 求法如下
*(1)用大的数对小的数求余
*(2)把小的数赋值给大的数, 把求余获得的结果赋值给小的数,
 *(3)循环上一步的操作, 直到求余的结果为零
*(4)上一步被求余的数就是我们要的最大公约数, 不信的话, 你可以动手试试
   

  1.  public class Programme6 {
  2.         public static void main(String[] args) {
  3.             int bigDivisor=0;//定义最大公约数
  4.             int multiple=0;//定义最小公倍数
  5.             System. out.println("请输入两个整数: ");
  6.             Scanner scanner = new Scanner(System.in);
  7.             int input1 = scanner.nextInt();// 获取第一个数
  8.             int input2 = scanner.nextInt();// 获取第二个数
  9.             multiple=input1*input2;//这个值保存, 求公约数后, 方便求得最小公倍数
  10.             int temp =1;// 交换用的中间数
  11.             if (input2 > input1) {//确保第一个数不小于第二个数
  12.                 temp=input1;
  13.                 input1=input2;
  14.                 input2=temp;
  15.             }
  16.             while (temp! =0) { //求余结果不等于零, 就一直循环
  17.                 temp=input1%input2;//求余结果
  18.                 input1=input2;//大的数已经没用了, 用小的数替代
  19.                 input2=temp;//把求余的结果赋值给小的数
  20.             }
  21.             bigDivisor=input1;//最后一次求余结果为零时, 被求余的数
  22.             multiple=multiple/bigDivisor;
  23.             System. out.println("最大公约数是: "+bigDivisor );
  24.             System. out.println("最小公倍数是: "+multiple);
  25.             scanner.close();
  26.         }
  27.     }


【程序 7】
    题目: 输入一行字符, 分别统计出其英文字母、 空格、 数字和其它字符的个数。
    程序分析:
    这里的需要的知识点:
1、 获取一行字符串, nextLine()
 2、 把字符串的每一个字符赋值到一个数值中
3、 对比每一个数值在ASK码的范围, 就可以确定它符号的类别
4、 char字符ASK码的范围
(1) 数字0到9: 48~57
(2) 字母A到Z: 65到90 a到z: 97到122
(3) 空格是 32

  1. public class Programme7 {
  2.         public static void main(String[] args) {
  3.             int num=0;//数字的个数
  4.             int letter=0;//字母的个数
  5.             int space=0;//空格的个数
  6.             int others=0;//其他的个数
  7.             System. out.println("请输入一串字符: ");
  8.             Scanner scanner=new Scanner(System.in);
  9.             String string=scanner.nextLine();//获取一行字符串
  10. //把字符串里面的值赋值给一个字符型数组
  11.             char[] arr=string.toCharArray();
  12. //遍历字符串里面的所有值
  13.             for (int i = 0; i < arr.length; i++) {
  14.                 if (arr[i]>=48&&arr[i]<=57) {//字符是数字
  15.                     num++;
  16.                 } else if((arr[i]>=65&&arr[i]<=90)| | (arr[i]>=97&&arr[i]<=122)) {
  17.                     letter++;
  18.                 }else if (arr[i]==32) {
  19.                     space++;
  20.                 }else {
  21.                     others++;
  22.                 }
  23.             }
  24.             System. out.println("数字: "+num+"个, 字母: "+letter+"个, 空格:"+space+"个, 其他: "+others+"个");
  25.             scanner.close();
  26.         }
  27.     }


【程序 8】
    题目: 求 s=a+aa+aaa+aaaa+aa. . . a 的值, 其中 a 是一个数字。 例如 2+22+222+2222+22222(此时共有 5 个
    数相加) , 几个数相加有键盘控制。 输出结果的形式如: 2+22+222=246;
    程序分析: 关键是计算出每一项的值。
    比如获取的数字为: a, 出现的项数为: n
    总结一下, 可以得到一下规律:
    1、 第一项有一个a, 最后一项有n个a
    2、 第 1 和第 2 项相差 2*10, 第 2 和第三项相差 2*100, 第 k 和第 k+1 项相差 2*(10 的 k 次方)
    

  1. public class Programme8 {
  2.         public static void main(String[] args) {
  3.             int n=0,a=0;
  4.             Scanner scanner=new Scanner(System.in);
  5.             System. out.println("请输入a的值: ");
  6.             a=scanner. nextInt();
  7.             System. out.println("请输入n的值: ");
  8.             n=scanner. nextInt();
  9.             int[] arr=new int[n];//创建数组长度为输入的项数
  10.             int i=1;//while循环初始化的值
  11.             arr[0]=a;//数组的第一个值为3
  12. //把每一项的值赋值给数组里面的数
  13.             while (i<n) {
  14.                 a*=10;
  15.                 arr[i]=a+arr[i-1];
  16.                 i++;
  17.             }
  18. //求和
  19.             int sum=0;
  20.             for(int s: arr){
  21.                 sum+=s;//累加求和
  22.                 if (s==arr[n-1]) {
  23.                     System. out.print(s);
  24.                     break;//最后一次只输出结果
  25.                 }
  26.                 System. out.print(s+"+");//前面的值输出结果, 后面还要加一个加号
  27.             }
  28.             System. out.println("="+sum);//完美结束
  29.         }
  30.     }


【程序 9】
    题目: 一个数如果恰好等于它的因子之和, 这个数就称为"完数"。 例如 6=1+2+3. 编程找出 1000 以内的
    所有完数。
    判断完数的方法:
            * 利用for循环判断所有因数的和是否和输入的值是否相等, 相等的话输出
* 求因数的方法:
  * (1) 两个嵌套循环, 并用i%j==0, 关于i和j的值范围: i从1到1000逐个遍历, j只需不大于i/2+1 即可。比如: 48, 最大的因数才24, 99最大的因数是33, 因数不会大于本身数的一半
* (2) j就是我们所求的因数, 把所有的j相加, 就可以得到因数总和
* (3) 因数总和已经包含 1 了, 因为第一次就保存 1 了
    

  1. public class Programme9 {
  2.         public static void main(String[] args) {
  3.             System. out.println("1000以内的因数有: ");
  4.             for (int i = 1; i <=1000; i++) {
  5.                 int sum=0;//所有因数的总和
  6.                 for (int j = 1; j < i/2+1; j++) {
  7.                     if (i%j==0) { //判断范围内的所有j相加, 就是因数总和
  8.                         sum=sum+j;
  9.                         if (i==sum) {
  10.                             System. out.print(i+" ");
  11.                         }
  12.                     }
  13.                 }
  14.             }
  15.         }
  16.     }


【程序 10】
    题目: 一球从h米高度自由落下, 每次落地后反跳回原高度的一半;
    再落下, 求它在 第n次落地时, 共经过多少米? 第n次反弹多高?
    程序分析: 反弹的高度: (1/2) 的n次方*h
 * 经过的距离: 这个可以总结得到: 第一次落地经过: h, 第二次落地经过: h+(h/2) *2,
 * 第三次落地经过: h+(h/2) *2+(h/2/2) *2
 * 那么第 n 次落地经过: h+(h/2) *2+(h/2/2) *2 +. . . +h/(2 的 n-1 次方) *2
  

pub
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/123408
推荐阅读
相关标签
  

闽ICP备14008679号