2022级大一电信Java练习二

编译环境:IDEA

一 水仙花数

【问题描述】输出从指定起始值到999以内(包括999)的“水仙花数”,水仙花数是指一个三位数,其各位数字的立方和等于其本身,例如:153=13+53+33,因此153是水仙花数。起始值由键盘输入。

【输入形式】从100起始的一个三位数
【输出形式】一行输出满足条件的水仙花数,用一个空格分隔数据,最后一个数据后也有一个空格

【样例输入】100
【样例输出】153 370 371 407 

【样例说明】无
【评分标准】通过测试用例才能得分

//水仙花数
import java.util.Scanner;//main中直接输入Scanner回车自动补充

class Main{
    public static void main(String[] args) {//改行只需输入 main +回车自动补充
        Scanner sc = new Scanner(System.in);
        int a =sc.nextInt();

        for (int i = a; i < 1000; i++) {//fori+回车 
            int b,c,d;
            b=i%10;      //取个位
            c=i/10%10;          //取十位
            d=i/10/10%10;           //取百位
            if (Math.pow(b,3)+Math.pow(c,3)+Math.pow(d,3) == i) {
                System.out.print(i+" ");
            }

        }
    }
}

二、 n个整数排序

【问题描述】输入n和n个整数,输出排序后的数据。(其中n值不超过100)

【输入形式】输入n和n个整数。(即输入的第一个数表示n,后面再输入n个整数)
【输出形式】输出数据占一行。数据间用空格分开,最后一个数后无空格

【样例输入】5 8 9 -12 6 -89

【样例输出】-89 -12 6 8 9
 

//整数排序  
import java.util.Arrays;
import java.util.Scanner;

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

        Scanner sca =new Scanner(System.in);
        int cnt = sca.nextInt();

        int[] num=new int[cnt];
        for (int i = 0; i < cnt; i++) {
            num[i] = sca.nextInt();
        }

        Arrays.sort(num);    //使用函数排序
        for (int i = 0; i < cnt; i++) {
            System.out.print(num[i]);
            if (i != cnt-1) { //每个数后加空格
                System.out.print(" ");
            }
        }
    }
}

三、杨辉三角

【问题描述】存储并打印杨辉三角的前n行。(n<=12)

【输入形式】一个整数n,表示所要打印的杨辉三角的行数(n<=12)
【输出形式】按行输出与n对应的杨辉三角(每个数据占4列,数据右靠)
【样例输入】6

【样例输出】

   1

   1   1

   1   2   1

   1   3   3   1

   1   4   6   4   1

   1   5  10  10   5   1

//水仙花数
import java.util.Scanner;

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

        Scanner scn = new Scanner(System.in);
        int n = scn.nextInt();

        int arr[][] = new int[n][n];

        for (int i = 0; i < arr.length; i++) {    //arr.length返回的是二维数组的行数
            for (int j = 0; j <= i; j++) {        //在第n行 其就有n个数
                if (j == 0||j == i) {             //如果是每行第一个或最后一个
                    arr[i][j] = 1;
                }
                else{                             //若是中间的数
                    arr[i][j] = arr[i-1][j] + arr[i-1][j-1];     //见图片
                }
                System.out.format("%4d",arr[i][j]);   //格式化输出

            }
            System.out.println();        //一行输出完毕换行
        }
    }
}

 四、 将n个十六进制数转换为十进制数,并求和

【问题描述】编写一个方法h2D(String s)将一个由数字字符和大写字母A、B、C、D、E、F组成的十六进制数转换成十进制数。 编写一个测试类,输入一个整数n,后面跟n个十六进制串,调用上述方法把它们转换成十进制整数,并输出它们的和。

【输入形式】一个整数n ,后跟n个十六进制数

【输出形式】n个十六进制数转换为十进数之后的和

【样例输入】3 1A5C 271 FF
【样例输出】7628

//将n个十六进制数转换为十进制数,并求和
import java.util.Scanner;

class Main{
    public static void main(String[] args) {
        Scanner sca = new Scanner(System.in);

        int n = sca.nextInt();       // n个数字

        int result = 0;       //和的结果

        for (int i = 0; i < n; i++) {     
            String str = sca.next();    //将十六进制数看作字符串输入 
            result += h2D(str);         
        }

        System.out.println(result);
    }

    public static int h2D(String s) {          //方法(要在main里面)
        return Integer.parseInt(s,16);         //将字符串s(16进制)转化为十进制
    }
}





五、约瑟夫环

【问题描述】有编号分别1、2、…、n的n个人依次排成一个圆圈形的队列,从1号开始循环报数1、2、3,报到3的人出列,其余的人继续循环报数,直到队列中剩下最后一人为止。输出留在队列中的最后那个人的编号 。

【输入形式】正整数n
【输出形式】最后留在队伍中的那个人的编号
【样例输入】6
【样例输出】1

//约瑟夫环
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        Scanner sca = new Scanner(System.in);
        int n = sca.nextInt();

        List<Integer> arr = new ArrayList<Integer>();   //动态数组

        //初始化 每个置为1 表示还在队伍     
        for (int i = 0; i < n; i++) {
            arr.add(1);
        }

        int t = 0, i = 0, cnt = 0;   
        // t 表示计数(计是否数到三

        do {
            //遍历数组 成环状
            if (i == n) {
                i = 0;
            }
            for (; i < n; i++) {
                //跳过排除的学生
                if (arr.get(i) == 0) {
                    continue; 
                }
                else {
//数数,记录
                    t++;
                    if (t == 3) {       //报到3了
                        //System.out.println(i);
                        arr.set(i, 0);   //置为0,排除
                        t = 0;           //重新数数
                        cnt++;           //记录排除的人数
                    }
                }
            }
        } while (cnt <= n - 1);       //循环n-1次,排除n-1个学生
        //System.out.println("循环次数:"+cnt);

//找到留下的学生
        for (i = 0; i < n; i++) {
            if (arr.get(i) == 1) {
                System.out.println(i + 1);
                break;
            }
        }

    }
}

 六、打印菱形星块

【问题描述】编程,输入整数n,打印类似于下面的2n-1行的菱形星块。 

【输入形式】一个正整数
【输出形式】菱形星块

【样例输入】5

【样例输出】

//输出*三角阵
import java.util.Scanner;

class Main{
    public static void main(String[] args) {
        Scanner sca = new Scanner(System.in);
        //输入n
        int n = sca.nextInt();

        int t =2;
        //绝对值
        for (int i = 1; i <= 2 * n - 1; i++) {
            //输出空格
            for (int j = 0; j < Math.abs(n - i); j++) {
                System.out.print(" ");
            }
            //输出* 前n行
            if (i<=n){
                for (int k = 0; k < 2 * i - 1; k++) {
                    System.out.print("*");
                }
            }
            //输出后n-1行
            else {
                for (int k = 0; k < 2 * (i-t) - 1; k++) {
                    System.out.print("*");
                }
                t+=2;
            }
            //一行结束换行
            System.out.print("\n");
        }
    }
}

 七、两个实数的四则运算

【问题描述】从键盘输入两个实数,完成两个实数的四则运算,注意处理除数为0的情况。

说明:实数用float型存储

【输入形式】两个实数
【输出形式】两个实数的四则运算结果
【样例输入】

//以下为两组测试数据,本行仅为说明,不输入,每次只测试一组数据

24 56

12 0

【样例输出】

80.0

-32.0

1344.0

0.42857143

 

12.0

12.0

0.0

error!Divide by zero!

import java.util.Scanner;

class Main{
    public static void main(String[] args) {
        Scanner sca = new Scanner(System.in);

        float a = sca.nextFloat();
        float b = sca.nextFloat();

        System.out.println(a+b);
        System.out.println(a-b);
        System.out.println(a*b);

        if (b==0){
            System.out.println("error!Divide by zero!");
        }
        else {
            System.out.println(a / b);
        }
    }
}

编程片段题

二、求e的近似值

【问题描述】下列程序用公式:e=1+1/1!+1/2!+1/3!+1/4!+……计算e常数,要求误差小于10-8,输出结果小数点后保留8位,程序运行输出为:2.71828183

【输入形式】无
【输出形式】2.71828183

【样例输入】无
【样例输出】2.71828183

class  Test
{  
                    public  static  void  main  (String[]  args)
                    {
                        
            
                     double  f=1;
                        int  k=1;
                        int  i=1;
                        do{
                                  
                                k=k*i;

                                f=f+1.0/k;
                                i++;
                        }while(1.0/k>=1e-8);   //误差小于1e-8
                            
  
                      System.out.printf( "%.8f",f  );   //java没有lf


                }                
}

 java格式化输出

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Qiming_Peng

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值