参考文献
参考: プログラミングコンテストチャレンジブック [第2版] ~問題解決のアルゴリズム活用力とコーディングテクニックを鍛える~
#三角形が作れるかどうかの判定。
n本の辺をがある。そこから3本選んで最も周の長さが長い三角形の時のその長さを求める。
なお、三角形が作れないときは0を出力。
例 入力 n=5; a=[2,3,4,5,10]; 出力 12
triangle.java
import java.util.*;
public class Triangle{
static void triangle() {
Scanner std = new Scanner(System.in);
long n = std.nextLong();
long answer = 0L;
long[] a = new long[100];//辺の本数は最大で100本
for(int i = 0; i<n; i++) {
a[i] = std.nextLong();
}
for(int i = 0; i<n; i++) {
for(int j = i+1; j<n; j++) {
for(int k = j+1; k<n; k++) {
long length = a[i]+a[j]+a[k];//周の長さ
long max = Math.max(a[i], Math.max(a[j], a[k]));//最も長い辺の長さ
long others = length - max; //他の2辺の長さの和
if(max < others) {
//answer = length; 2021年10月17日間違い
answer = Math.max(answer,length);//2021年10月18日更新。
}
}
}
}
System.out.println(answer);
}
public static void main(String[] args) {
triangle();
}
}
#Ants
長さLcmの竿の上をn匹のアリが毎秒1cmのスピードで歩いています。アリが竿の端に到達すると竿の下に落ちていきます。また、竿の上は狭くてすれ違えないので、二匹のアリが出会うと、それぞれ反対を向いて戻っていきます。各アリについて、現在の竿の左端からの距離x[i]はわかりますが、どちらの方向を向いているのかはわかりません。すべてのアリが竿から落ちるまでにかかる最小の時間と最大の時間をそれぞれ求めなさい。
例 入力 L = 10 ; n = 3 ; x= [2,6,7]; 出力 min = 4 max = 8
Ants.java
import java.util.*;
public class Ants{
static void ants() {
Scanner std = new Scanner(System.in);
//棒の長さ
System.out.print("L = ");
int L = std.nextInt();
//アリの数
System.out.print("n = ");
int n = std.nextInt();
int x[] = new int[n];
//アリの位置
System.out.print("x[] = ");
for(int i=0; i<n ; i++) {
x[i] = std.nextInt();
}
//最小の時間
int minT = 0;
for(int i=0; i<n; i++) {
minT = Math.max(minT, Math.min(x[i], L-x[i]));
}
//最大の時間
int maxT = 0;
for(int i=0; i<n;i++) {
maxT = Math.max(maxT, Math.max(x[i], L-x[i]));
}
System.out.println("min = "+minT);
System.out.println("max = "+maxT);
}
public static void main(String[] args) {
ants();
}
}