数据结构第二周

80 阅读2分钟

数据结构第二周

第二周
  • POJ1004--财务管理问题

public class Average {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        double sum = 0.0;
        for (int i = 0; i < 12; i++) {
            sum += scanner.nextDouble();
        }
        //不管传入的任何值,均保留两位小数
        DecimalFormat df = new DecimalFormat("0.00");
        System.out.println(df.format(sum/12));
        /*另一种方法
        String s = String.format("%.2f", sum);
        //将String转成Double
        Double d = Double.parseDouble(s);
        System.out.println(d/12);
        其中String s=String.format("%.2f",d)表示小数点后任意两位小数,其中2为表示两位小数,若需要三位小		数,把2改为3即可,其他同理。
		总结:这种方法不管传入的值是多少,均保留两位小数,并且符合四舍五入的规则。
        */
    }
}
  • HDU2012--素数判定问题

    public class Hdu2012 {
        public static void main(String[] args) {
            Scanner input=new Scanner(System.in);
            while (input.hasNext()){
                int x=input.nextInt();
                int y=input.nextInt();
                //打标记 默认为true
                Boolean flag1=true;
                if(x==0&&y==0){
                    break;
                }
                //在范围内判断
                for(int i=x;i<=y;i++){
                    if(judge(i)==false){
                        flag1=false;
                    }
                }
                if(flag1==true){
                    System.out.println("OK");
                }
                else {
                    System.out.println("Sorry");
                }
            }
        }
        //判断是否为素数
        public  static boolean judge(int n){
            int i=n*n+n+41;
            Boolean flag=true;
            for (int j=2;j<i;j++){
                if(i%j==0){
                    flag=false;
                }
            }
            return flag;
        }
    }
    
  • POJ1001--求高精度幂

import java.util.Scanner;
import java.math.*;

public class Poj1001{
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        //如果不断有输入,则不断执行循环体里面的代码
        while (sc.hasNext()) {
            //以下i行代码将bigInteger转化成bigDecimal
            BigDecimal bd = new BigDecimal(sc.next());
            // 返回其值为 (thisn) 的 BigDecimal,准确计算该幂,使其具有无限精度。
            BigDecimal result = bd.pow(sc.nextInt());
            //1)stripTrailingZeros().返回数值上等于此小数,但从该表示形式移除所有尾部零的 BigDecimal。
            //2)toPlainString().返回不带指数字段的此 BigDecimal 的字符串表示形式。
            String s = result.stripTrailingZeros().toPlainString();
            //如果整数部分是0,直接从小数点开始截取
            if(s.startsWith("0")) {
                s=s.substring(1);
            }
            System.out.println(s);
        }
    }
}

image-20220909172126785

  • POJ1003--Hangover

import java.util.Scanner;
/**
 * 先确定题目中所需要的变量,f—读取的长度,sum—计算的长的,n—卡片数量,初始直接将n设置为1,sum设置为0.5,
 * 因为它只要有长度那必然要用一张卡片,第一张卡片的长度就是0.5。然后进行累加,每次加上1/(n+1)的长度。
 * 然后与f进行比较,大于f直接输出,然后初始化n,sum重新开始计算下一步,按照题目给的方式输出,小于继续循环累加。
 * */
public class Poj1003 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while (sc.hasNext()){
            double f = sc.nextDouble();
            if (f==0){
                return;
            }
            if (f<0.5){
                System.out.println("1 card(s)");
                continue;
            }
            int ans =1;
            double sum = 0.5;
            int base = 2;
            do {
                base++;
                ans++;
                sum +=1.0/base;
            }while (sum<f);
                System.out.println(ans+" card(s)");
        }
    }
}