ひたすら勉強 & TopCoder SRM515

本日は重要な合宿がありましたが、さすがに不参加です。
今日はビュフォンの針など、確率論を中心に勉強しました。
スターリングの公式とかエグイ。

夜はTopCoder SRM515に参戦。

easyは数列が3つあたえられていて、
中の要素をそれぞれ足しあわせたものが5と8だけ含む数字なら
ラッキーナンバーとする。このラッキーナンバーがいくつ有るか求めよ。
ただし、同じラッキーナンバーはカウントしてはならない。

愚直実装ですが、ラッキーナンバーなら要素に加えて行って、その要素がすでにあるかどうかを
ArrayListのcontainsで調べています。

import java.util.*;

public class FortunateNumbers{
public int getFortunate(int[] a, int[] b, int[] c){
Arrays.sort(a);
Arrays.sort(b);
Arrays.sort(c);
int numbers = 0;
ArrayList oks = new ArrayList();
for(int i = 0 ; i < a.length ; i++){
for(int j = 0 ; j < b.length ; j++){
for(int k = 0 ; k < c.length ; k++){
boolean flag = true;
String num = String.valueOf(a[i]+b[j]+c[k]);
for(int l = 0 ; l < num.length() ; l++){
if(num.charAt(l) != 53 && num.charAt(l) != 56){
flag = false;
break;
}
}
if(flag == true && !oks.contains(Integer.parseInt(num))){
oks.add(Integer.parseInt(num));
numbers++;
}
}
}
}
return numbers;
}
}

2問目、短針と長針の角度が与えられていて、時刻を特定できるなら一番早い時間を、
存在しないなら""を返す。
0 0を入力された時にchallengeされてしまいました。一応ダメなソース。

public class RotatedClock{
public String getEarliest(int hourHand,int minuteHand){
String s = "";
if(hourHand == minuteHand)return "";
for(int i = 0 ; i < 12 ; i++){
int HourHands = hourHand%30;
int minuteHands = minuteHand/6;
System.out.println(hourHand);
System.out.println(minuteHands);
if(HourHands == (double)minuteHands * 0.5){
if(hourHand/30 < 10){
s += "0";
}
s += hourHand/30+":";
if(minuteHands < 10){
s += "0";
}
s += minuteHands;
return s;
}
hourHand += 30;
minuteHand += 30;
if(minuteHand >= 360){
minuteHand -=360;
}
if(hourHand >= 360){
hourHand-=360;
}
}
return "";
}
}

  by ddrer-yossi | 2011-08-20 23:23 | TopCoder

<< 二戦目の決戦前日 おっぱい言語(brainfuck) >>

SEM SKIN - DESIGN by SEM EXE