Rotation of a Pattern(AOJ No.0133), Exit Survey(AOJ No.0134), Clock Short Hand and Long Hand(AOJ No.0135), Frequency Distribution of Height(AOJ No.0136), Middle-Square Method(AOJ No.0137), Track and Field Competition(AOJ No.0138), Snakes(AOJ No.0139), Bu
Rotation of a Pattern(AOJ No.0133)
8×8のパターンを右回転
コード
import java.util.*; public class aoj0133 { static final Scanner stdin = new Scanner(System.in); static final char[][][] pat = new char[4][8][8]; public static void main(String[] args) { for(int i = 0; i < 8; i++) pat[0][i] = stdin.next().toCharArray(); for(int k = 1; k < 4; ++k){ System.out.println(k*90); for(int i = 0; i < 8; ++i){ for(int j = 0; j < 8; ++j) pat[k][i][j] = pat[k-1][8-j-1][i]; System.out.println(pat[k][i]); } } } }
Exit Survey(AOJ No.0134)
()が与えられて、その平均(小数切り捨て)を求める
制約
コード
longでおk
import java.util.*; public class aoj0134 { static final Scanner stdin = new Scanner(System.in); public static void main(String[] args) { int n = stdin.nextInt(); long sum = 0L; for(int i = 0; i < n; ++i) sum += stdin.nextLong(); System.out.println(sum/n); } }
Clock Short Hand and Long Hand(AOJ No.0135)
00:00 〜 11:59までの時間が与えられて、時針と分針のなす角がなら"alert"、なら"safe"、それ以外は"warning"と出力。
コード
のときをしなくてWrongAnswerだした。バカすぎる。
import java.util.*; public class aoj0135 { static final Scanner stdin = new Scanner(System.in); public static void main(String[] args) { int n = stdin .nextInt(); while(n-- > 0){ String[] str = stdin.next().split(":"); int h = Integer.parseInt(str[0]), m = Integer.parseInt(str[1]); double a = (30.0 * h) + m / 2.0, b = m * 6.0; double x = Math.min(Math.abs(a-b), Math.abs(b-a)); if(x >= 180) x = 360 - x; System.out.println((x < 30) ? "alert" : (x < 90) ? "warning" : "safe"); } } }
Frequency Distribution of Height(AOJ No.0136)
身長データが与えられて、5cm刻みの階級で集計してヒストグラムを作る。
コード
import java.util.*; public class aoj0136 { static final Scanner stdin = new Scanner(System.in); static final int[] freq = new int[7]; public static void main(String[] args) { int n = stdin.nextInt(); Arrays.fill(freq, 0); while(n-- > 0){ double x = stdin.nextDouble(); if(x < 165.0) freq[1]++; else if(x < 170.0) freq[2]++; else if(x < 175.0) freq[3]++; else if(x < 180.0) freq[4]++; else if(x < 185.0) freq[5]++; else freq[6]++; } for(int i = 1; i <= 6; ++i){ System.out.print(i+":"); while(freq[i]-- > 0) System.out.print("*"); System.out.println(); } } }
Middle-Square Method(AOJ No.0137)
フォン・ノイマンによる乱数生成法である平方採中法(Middle-Square Method)で乱数を10個生成する。
シードが与えられる。
を8桁整数と見なしたときの中央4桁をとして
を乱数として出力する。
コード
import java.util.*; public class aoj0137 { static final Scanner stdin = new Scanner(System.in); public static void main(String[] args) { int n = stdin.nextInt(); for(int i = 1; i <= n; ++i){ System.out.println("Case " + i + ":"); int s = stdin.nextInt(); for(int j = 0; j < 10; ++j){ s = Integer.parseInt(String.format("%08d", s*s).substring(2, 6)); System.out.println(s); } } } }
Track and Field Competition(AOJ No.0138)
1〜3組の選手番号とタイムが与えられる(1組は8人構成)。
各組の上位2人のレコードと、各組3位以下のうち上位2組のレコードを出力。
同じタイムの選手はいない。
コード
import java.util.*; public class aoj0138 { static final Scanner stdin = new Scanner(System.in); public static void main(String[] args) { @SuppressWarnings("unchecked") TreeMap<Double, Integer>[] in = new TreeMap[4]; for(int i = 0; i < 4; ++i) in[i] = new TreeMap<Double, Integer>(); for(int i = 0; i < 24; ++i){ int no = stdin.nextInt(); in[i/8].put(stdin.nextDouble(), no); } for(int i = 0; i < 3; ++i){ int j = 1; for(double t: in[i].keySet()){ if(j <= 2) System.out.printf("%d %.2f\n", in[i].get(t), t); else in[3].put(t, in[i].get(t)); j++; } } int j = 1; for(double t: in[3].keySet()){ if(j > 2) break; System.out.printf("%d %.2f\n", in[3].get(t), t); j++; } } }
Snakes(AOJ No.0139)
">'"の後に"="が1個以上並んだ後、"#"が来て、さらに前と同じ個数の"="が来た後、"~"で終わる -> "A"
">^"の後に "Q="が1個以上並んだ後、"~~"で終わる -> B
それ以外 -> "NA"
と答える。
コード
正規表現が使える言語なら簡単
import java.util.*; import java.util.regex.*; public class aoj0139 { static final Scanner stdin = new Scanner(System.in); public static void main(String[] args) { Pattern A = Pattern.compile(">\'(=+)#\\1~"); Pattern B = Pattern.compile(">\\^(Q=)+~~"); int n = stdin.nextInt(); while(n-- > 0){ String s = stdin.next(); Matcher AM = A.matcher(s), BM = B.matcher(s); System.out.println( AM.find() && AM.group().equals(s) ? "A" : BM.find() && BM.group().equals(s) ? "B" : "NA"); } } }
Bus Line(AOJ No.0140)
0から9までのバス停があり、
...→0→1→2→3→4→5→6→7→8→9→5→4→3→2→1→...
の順で巡回する。
スタートとゴールのバス停番号が与えられて、スタートからゴールまでの最短経路(バス停番号系列)を求める。
コード
1,2,3,4,5がスタートのとき気をつける。
コード汚い...
import java.util.*; public class aoj0140 { static final Scanner stdin = new Scanner(System.in); static final char[] pat = "012345678954321".toCharArray(); static void print(ArrayList<Integer> l){ for(int i = 0; i < l.size(); ++i){ System.out.print(l.get(i)); System.out.print(i < l.size()-1 ? " " : "\n"); } } public static void main(String[] args) { int n = stdin.nextInt(); while(n-- > 0){ int start = stdin.nextInt(), goal = stdin.nextInt(); int cur = start; ArrayList<Integer> r = new ArrayList<Integer>(), l = new ArrayList<Integer>(); while(Integer.parseInt(""+pat[cur]) != goal){ r.add(Integer.parseInt(""+pat[cur])); cur = (cur + 1) % pat.length; } r.add(goal); if(start <= 5 && start != 0){ cur = 15-start; while(Integer.parseInt(""+pat[cur]) != goal){ l.add(Integer.parseInt(""+pat[cur])); cur = (cur + 1) % pat.length; } l.add(goal); print(r.size() < l.size() ? r : l); }else{ print(r); } } } }