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