美文网首页大数据
JAVA二十二道经典编程题

JAVA二十二道经典编程题

作者: 宠白者 | 来源:发表于2018-08-13 09:28 被阅读22次

    一.打印水仙花数:所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数本身

    int a, b, c;

    for(int i = 1; i <1000; i++){//因为水仙花数是 一个三位数,所以循环体范围控制在1000以内

    a = i % 10;//用求余法取个位数

    b = i%100/10;//取十位数上的值

    c = i /100;//除以100取百位上的值,因为c是int类型

    if(i == a*a*a + b*b*b + c*c*c){

    System.out.print(i+" ");

    }

    }

    二打印一个实心菱形图案

    for(int i =1; i <=4; i++){//把菱形图案分成上下两部分,上四下三,i控制上部分的行数循环1,2,3,4

    for(int j= 1; j <=4-i; j++){//j被定义来控制*前面的空格数量

    System.out.print(" ");

    }

    for(int k = 1; k <= 2*i - 1; k++){//k被定义来打印每行*的数量

    System.out.print("*");

    }

    System.out.println("");

    }

    for(int i = 1; i <=3; i++){//i在这里控制下部分菱形循环的行数

    for(int j = 1; j <= i;j++){//j来控制下部分*前面的空格

    System.out.print(" ");

    }

    for(int k = 5; k >=2*i-1; k--){//k被定义来打印每行*的数量

    System.out.print("*");

    }

    System.out.println("");

    }

    三从键盘接收一个名次(int) 使用switch-case作如下分支

    名次为 1 奖IPHONE8

    名次为 2 奖IPHONE7

    名次为 3 奖IPHONE6

    名次为 4 奖IPHONE5

    其它名次 努力吧,少年

    System.out.println("请输入你的名次:");

    Scanner scanner = new Scanner(System.in);//创建一个对象

    //number 前面的数据类型选择取决于后面next获取到的返回值

    int number = scanner.nextInt();// next()获取一个字符串 nextInt()获取一个整数 nextFloat() 获取一个浮点型

    switch(number){

    case 1:

      System.out.println("名次为1,奖励一台苹果8");

      break;

    case 2:

      System.out.println("名次为2,奖励一台苹果7");

      break;

    case 3:

      System.out.println("名次为3,奖励一台苹果6");

      break;

    case 4:

      System.out.println("名次为4,奖励一台苹果5");

      break;

    default:

      System.out.println("努力吧,小伙子!");

      break;

    }

    四.判断给定的某个年份是否是闰年。

    闰年的判断规则如下:

    (1)若某个年份能被4整除但不能被100整除,则是闰年。

    (2)若某个年份能被400整除,则也是闰年。

    System.out.println("请输入年份:");

    Scanner scanner = newScanner(System.in);

    int year = scanner.nextInt();//用户自己输入int类型 的年份

    if(year%4 == 0 && year%100 != 0 || year %400 == 0){//判断条件

    System.out.println(year+"年是闰年");

    }else{

    System.out.println(year+"年不是闰年");

    }

    五.100以内的数逢7过

    System.out.println("逢7必过的数都在这了:");

    int num = 0;

    for(int i = 1; i <=100; i++){//控制循环体的范围是100

    if(i %10 == 7 ||i %7 == 0 || i/10 == 7){//该数不能有7、不能被7整除

    continue;

    }else{

    System.out.print(i+" ");

    num++;

    if(num % 10 == 0){

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

    }

    }

    }

    六.打印九九乘法表

    //该题主要训练的是for循环的运用

    int i,j;

    for(i = 1; i<=9; i++){//i控制乘法表的行数

    for(j = 1; j<=i; j++){//j控制列数

    System.out.print(j+"*"+i+"="+(i*j)+" ");//计算的算法

    }

    System.out.println();

    }

    七.打印2到10000的所有素数,每行显示8个素数

    //素数只能被1和自身整除,没有约数,如2,3,5,7,11,13

    int count = 0;

    int j;

    for(int i = 2; i <= 10000; i++){//因为2是最小的素数,所以从2 开始,循环范围在10000以内

    for(j =2; j <= Math.sqrt(i);j++){//从2开始循环,对i进行开平方

    if(i % j == 0){//如果j小于i的开平方,就让i%j取余,能被整除,不是素数

      break;

    }

    }

    if(j > Math.sqrt(i)){//不能被整除,判断j是否大于i的平方根,大于,是素数

    System.out.print(i+" ");

    count ++;

    if(count % 8 == 0){//一行八个数

    System.out.println("");

    }

    }

    }

    八.打印一个空心菱形

                 *

            *        *

    *                     *

         *           *

               *

    public static void main(String [] args){//main方法

    for(int i = 1; i <= 4; i++){//把空心菱形分成上下两部分,i表示上半部分的行数

    for(int j =1; j <=4-i; j++){//j表示*里面需要打印的空格数

    System.out.print(" ");

    }

    for(int k =1; k<= 2*i-1; k++){//k表示要打印的*数

    if(k == 1 || k == 2*i-1){//如果要打印的*是第一个或者最后一个就打印出来

    System.out.print("*");

    }else{

    System.out.print(" ");//如果不是就打印空格

    }

    }

    System.out.println();

    }

    for(int h =1; h <=3; h++){//h表示下半部分要打印的行数

    for(int j =1; j <=h; j++){//j表示要*里面要打印的空格数

    System.out.print(" ");

    }

    for(int k =1; k <=7-2*h; k++){

    if(k == 1 || k ==7-2*h){//如果*是第一个或者最后一个就打印出来

    System.out.print("*");

    }else{

    System.out.print(" ");//如果不是就打印空格

    }

    }

    System.out.println();

    }

    九.有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子对数为多少?

    程序分析:兔子的规律为数列1,1,2,3,5,8,13,21....

    public static void main(String[] args){

    int n = 10;

    System.out.println("第"+n+"个月兔子总数为"+fun(n));

    }

    private static int fun(int n){

    if(n==1 || n==2)

       return 1;

    else

       return fun(n-1)+fun(n-2);

    }

    }

    十.输入两个正整数m和n,求其最大公约数和最小公倍数。

    public static void main(String[] args){

    int m,n;

    try{

    m = Integer.parseInt(args[0]);

    n = Integer.parseInt(args[1]);

    }catch(ArrayIndexOutOfBoundsException e){

    System.out.println("输入有误");

    return;

    }

    max_min(m,n);

    }

    //求最大公约数和最小公倍数

    private static void max_min(int m, int n){

    int temp = 1;

    int yshu = 1;

    int bshu = m*n;

    if(n

    temp = n;

    n = m;

    m = temp;

    }

    while(m!=0){

    temp = n%m;

    n = m;

    m = temp;

    }

    yshu = n;

    bshu /= n;

    System.out.println(m+"和"+n+"的最大公约数为"+yshu);

    System.out.println(m+"和"+n+"的最小公倍数为"+bshu);

    }

    }

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

    public static void main(String[] args){

    int n = 10000;

    compNumber(n);

    }

    //求完数

    private static void compNumber(int n){

    int count = 0;

    System.out.println(n+"以内的完数:");

    for(int i=1;i

    int sum = 0;

    for(int j=1;j

    if((i%j)==0){

    sum += j;

    if(sum==i){

      System.out.print(i+" ");

      if((count++)%5==0)

        System.out.println();

        }

    }

    }

    }

    }

    }

    十二.求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制。

    public static void main(String[] args){

    System.out.print("求s=a+aa+aaa+aaaa+...的值,请输入a的值:");

    Scanner scan = new Scanner(System.in).useDelimiter("\\s*");//以空格作为分隔符

    int a = scan.nextInt();

    int n = scan.nextInt();

    scan.close();//关闭扫描器

    System.out.println(expressed(2,5)+add(2,5));

    }

    //求和表达式

    private static String expressed(int a,int n){

    StringBuffer sb = new StringBuffer();

    StringBuffer subSB = new StringBuffer();

    for(int i=1;i

      subSB = subSB.append(a);

      sb = sb.append(subSB);

      if(i

        sb = sb.append("+");

    }

    sb.append("=");

    return sb.toString();

    }

    //求和

    private static long add(int a,int n){

    long sum = 0;

    long subSUM = 0;

    for(int i=1;i

    subSUM = subSUM*10+a;

    sum = sum+subSUM;

    }

    return sum;

    }

    }

    十三.一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在 第10次落地时,共经过多少米?第10次反弹多高?

    import java.util.Scanner;

    public class Prog10{

    public static void main(String[] args){

    System.out.print("请输入小球落地时的高度和求解的次数:");

    Scanner scan = new Scanner(System.in).useDelimiter("\\s");

    int h = scan.nextInt();

    int n = scan.nextInt();

    scan.close();

    distance(h,n);

    }

    //小球从h高度落下,经n次反弹后经过的距离和反弹的高度

    private static void distance(int h,int n){

    double length = 0;

    for(int i=0;i

    length += h;

    h /=2.0 ;

    }

    System.out.println("经过第"+n+"次反弹后,小球共经过"+length+"米,"+"第"+n+"次反弹高度为"+h+"米");

    }

    }

    十四.有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?

    程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去 掉不满足条件的排列。

    public class Prog11{

    public static void main(String[] args){

    int count = 0;

    int n = 0;

    for(int i=1;i<5;i++){

    for(int j=1;j<5;j++){

    if(j==i)

      continue;

    for(int k=1;k<5;k++){

    if(k!=i && k!=j){

    n = i*100+j*10+k;

      System.out.print(n+" ");

      if((++count)%5==0)

      System.out.println();

    }

    }

    }

    }

    System.out.println();

    System.out.println("符合条件的数共:"+count+"个");

    }

    }

    十五.输入某年某月某日,判断这一天是这一年的第几天?

    程序分析:以3月5日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天,特殊情况,闰年且输入月份大于3时需考虑多加一天。

    import java.util.Scanner;

    public class Prog14{

    public static void main(String[] args){

    Scanner scan = new Scanner(System.in).useDelimiter("\\D");//匹配非数字

    System.out.print("请输入当前日期(年-月-日):");

    int year = scan.nextInt();

    int month = scan.nextInt();

    int date = scan.nextInt();

    scan.close();

    System.out.println("今天是"+year+"年的第"+analysis(year,month,date)+"天");

    }

    //判断天数

    private static int analysis(int year, int month, int date){

    int n = 0;

    int[] month_date = new int[] {0,31,28,31,30,31,30,31,31,30,31,30};

    if((year%400)==0 || ((year%4)==0)&&((year%100)!=0))

      month_date[2] = 29;

    for(int i=0;i

      n += month_date[i];

    return n+date;

    }

    }

    十六.猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。

    程序分析:采取逆向思维的方法,从后往前推断。

    public class Prog17{

    public static void main(String[] args){

    int m = 1;

      for(int i=10;i>0;i--)

        m = 2*m + 2;

      System.out.println("小猴子共摘了"+m+"桃子");

    }

    }

    十七.求1+2!+3!+...+20!的和

    程序分析:此程序只是把累加变成了累乘。

    public class Prog21{

    public static void main(String[] args){

    long sum = 0;

    for(int i=0;i<20;i++)

      sum += factorial(i+1);

    System.out.println(sum);

    }

    //阶乘

    private static long factorial(int n){

    int mult = 1;

    for(int i=1;i

      mult *= i;

    return mult;

    }

    }

    十八.一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。

    import java.io.*;

    public class Prog25{

    public static void main(String[] args){

    int n = 0;

    System.out.print("请输入一个5位数:");

    BufferedReader bufin = new BufferedReader(new InputStreamReader(System.in));

    try{

      n = Integer.parseInt(bufin.readLine());

    }catch(IOException e){

    e.printStackTrace();

    }finally{

    try{

      bufin.close();

    }catch(IOException e){

    e.printStackTrace();

    }

    }

    palin(n);

    }

    private static void palin(int n){

    int m = n;

    int[] a = new int[5];

    if(n<10000 || n>99999){

    System.out.println("输入的不是5位数!");

    return;

    }else{

      for(int i=0;i<5;i++){

      a[i] = n%10;

      n /= 10;

      }

      if(a[0]==a[4] && a[1]==a[3])

        System.out.println(m+"是一个回文数");

      else

        System.out.println(m+"不是回文数");

        }

       }

    }

    十九.对10个数进行排序

    程序分析:可以利用选择法,即从后9个比较过程中,选择一个最小的与第一个元素交换, 下次类推,即用第二个元素与后8个进行比较,并进行交换。

    public class Prog28{

    public static void main(String[] args){

    int[] a = new int[]{31,42,21,50,12,60,81,74,101,93};

    for(int i=0;i<10;i++)

    for(int j=0;j

    if(a[j]>a[j+1]){

    int temp = a[j];

    a[j] = a[j+1];

    a[j+1] = temp;

    }

    for(int i=0;i

      System.out.print(a[i]+" ");

    }

    }

    二十.求一个3*3矩阵对角线元素之和

    程序分析:利用双重for循环控制输入二维数组,再将a[i][i]累加后输出。

    public class Prog29{

    public static void main(String[] args){

    int[][] a = new int[][] {{100,2,3,},{4,5,6},{17,8,9}};

    matrSum(a);

    }

    private static void matrSum(int[][] a){

    int sum1 = 0;

    int sum2 = 0;

    for(int i=0;i

      for(int j=0;j

       if(i==j) sum1 += a[i][j];

       if(j==a.length-i-1) sum2 += a[i][j];

      }

    System.out.println("矩阵对角线之和分别是:"+sum1+"和"+sum2);

    }

    }

    二十一.将一个数组逆序输出。

    程序分析:用第一个与最后一个交换。

    public class Prog31{

    public static void main(String[] args){

    int[] A = new int[]{1,2,3,4,5,6,7,8,9,};

    print(A);

    System.out.println();

    int[] B = reverse(A);

    print(B);

    }

    private static int[] reverse(int[] A){

    for(int i=0;i

    int temp = A[A.length-i-1];

    A[A.length-i-1] = A[i];

    A[i] = temp;

    }

    return A;

    }

    private static void print(int[] A){

    for(int i=0;i

      System.out.print(A[i]+" ");

    }

    }

    二十二.打印出杨辉三角形(要求打印出10行如下图)

    程序分析:

         1

        1 1

        1 2 1

    1 3 3 1

     1 4 6 4 1

    1 5 10 10 5 1

    public class Prog33{

    public static void main(String[] args){

    int[][] n = new int[10][21];

    n[0][10] = 1;

    for(int i=1;i<10;i++)

      for(int j=10-i;j<10+i+1;j++)

        n[i][j] = n[i-1][j-1]+n[i-1][j+1];

    for(int i=0;i<10;i++){

    for(int j=0;j<21;j++){

    if(n[i][j]==0)

      System.out.print("   ");

    else{

        if(n[i][j]<10)

          System.out.print("  "+n[i][j]);//空格为了美观需要

        else if(n[i][j]<100)

          System.out.print(" "+n[i][j]);

          else

            System.out.print(n[i][j]);

      }

    }

    System.out.println();

    }

    }

    }

    相关文章

      网友评论

        本文标题:JAVA二十二道经典编程题

        本文链接:https://www.haomeiwen.com/subject/yzadbftx.html