T3179,T1372,T1371,T2065

T3179,T1372,T1371,T2065

T3179

花椰妹拿到了蒜头君刚刚选的三根木棍组成的三角形,三条边的长度分别为 a, b, c 她想要知道这个三角形是不是直角三角形:

如果是直角三角形,需要输出这个三角形的斜边长的平方;
如果不是直角三角形,需要输出以其中任意两条边为直角边的直角三角形的斜边平方的最大值;

解析:使用 ArrayList 存储数据,并进行排序 从小到大 根据勾股定理进行直角三角形判断

注意:未经过系统测试 因为 未提供 java 语言提交

package com.java3.ch4;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Scanner;

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

        ArrayList<Integer> list = new ArrayList<>();
        for(int i = 0;i < 3;i++){
            list.add(scan.nextInt());
        }

        Collections.sort(list, new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                //从小到大
                return o1 - o2;
            }
        });

        //测试排序结果
//        for(Integer temp:list){
//            System.out.print(temp + " ");
//        }
        //tempSqrt两条较短边的平方和
        int tempSqrt = list.get(0) * list.get(0) + list.get(1) * list.get(1);

        //判断是否为直角三角形
        boolean isFlag = (tempSqrt == list.get(2) * list.get(2));
        if(isFlag){
            System.out.println(tempSqrt);
        }else{
            int tempSqrtMax = list.get(1) * list.get(1) + list.get(2) * list.get(2);
            System.out.println(tempSqrtMax);
        }
    }
}
3 4 6
52

T1372

百钱买百鸡问题:公鸡五文钱一只,母鸡三文钱一只,小鸡三只一文钱,用 100 文钱买 100 只鸡,公鸡、母鸡、小鸡各买多少只?

本程序要求解的问题是:给定一个正整数 n,用 n 文钱买 n 只鸡,问公鸡、母鸡、小鸡各买多少只?

解析:使用双层循环 i 层循环表示公鸡数量 j 层循环表示母鸡数量 tempK = n - i- j 表示小鸡数量并且小鸡数量是3的整数倍

package com.java3.ch4;

import java.util.Scanner;

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

        int n = scan.nextInt();
        //isFlag表示有无解法
        boolean isFlag = false;
        // i 层循环表示公鸡数量
        for(int i = 0;i <= n / 5 ;i ++){
            //j 层循环表示母鸡数量
            for(int j = 0;j <= n / 3;j++){
                //tempK 表示小鸡数量
                int tempK = n - i - j;
                if(tempK % 3 != 0){
                    continue;
                }else {
                    int price = i * 5 + j * 3 + tempK / 3;
                    if (price == n) {
                        System.out.println(i + " " + j + " " + tempK);
                        isFlag = true;
                    }
                }
            }
        }

        if(!isFlag){
            System.out.println("No Answer.");
        }
    }
}
100
0 25 75
4 18 78
8 11 81
12 4 84

T1371

蒜头君为了实现暑假去云南旅游的梦想,决定以后每天只消费 1 元,每花 k 元就可以再得到 1 元,一开始蒜头君有 M 元,问最多可以坚持多少天

解析:每天的活动分为三个阶段:判断当前钱数是否为0,金钱减少 天数增加,判断是否消费 k 天

package com.java3.ch4;

import java.util.Scanner;

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

        int M = scan.nextInt();
        int k = scan.nextInt();
        int days = 0;
        while(true){
            //判断当前钱数是否为0
            if(M == 0){
                System.out.println(days);
                break;
            }

            //金钱减少 天数增加
            M--;
            days++;

            //判断是否消费 k 天
            if(days % k == 0){
                M++;
            }
        }
    }
}
4 3 
5

T2065

给定一个整数,请将该数各个位上数字反转得到一个新数。新数也应满足整数的常见形式,即除非给定的原数为零,否则反转后得到的新数的最高位数字不应为零(参见样例 2)

解析: 先判断该数是否为负数,并给出标志 使用 Math.abs() 取值为正数 取最后一位数 带入 output = output * 10 + temp; 即可

package com.java3.ch4;

import java.util.Scanner;

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

        int n = scan.nextInt();


        System.out.println(reverse(n));

    }
    public static int reverse(int n){
        //判断是否是负数
        boolean isFlag = false;
        if(n < 0){
            isFlag = true;
        }
        n = Math.abs(n);

        int temp = 0;
        int output = 0;
        while(n > 0){
            temp = n % 10;
            output = output * 10 + temp;

            n /= 10;
        }

        if(isFlag){
            return 0 - output;
        }else{
            return output;
        }
    }
}
-380
-83
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值