提出詳細
ソースコード
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
public class ProbabilityCalculator {
public double getDrawCardProbability(double deckNum, double drawNum, double targetCardNum) {
if(deckNum == drawNum && targetCardNum > 0) return 1;
boolean isMajority = (deckNum / 2 > drawNum) ;
double searchNum = isMajority ? drawNum : deckNum - drawNum;
double neverDrawP = (deckNum - targetCardNum) / deckNum;
for (int i = 1; i < searchNum; i++) {
neverDrawP *= (deckNum - targetCardNum - i) / (deckNum - i);
}
double drawP = (1 - neverDrawP);
return drawP;
}
public static void main(String[] args) {
// // TODO Auto-generated method stub
File inFile = new File("D.txt");
BufferedReader reader = null;
FileReader fr = null;
File outFile = new File("result.txt");
BufferedWriter writer = null;
FileWriter fw = null;
try {
// リーダ生成
fr = new FileReader(inFile);
reader = new BufferedReader(fr);
// ライター生成
fw = new FileWriter(outFile);
writer = new BufferedWriter(fw);
// テストケース数を読み込み
int testCaseNum = Integer.parseInt(reader.readLine());
// テストケース毎に計算、出力
for (int i = 1; i <= testCaseNum; i++) {
String caseNumStr = "Case #" + i + ":";
String[] inputs = reader.readLine().split(" ");
int deckNum = Integer.parseInt(inputs[0]);
int drawNum = Integer.parseInt(inputs[1]);
int thresholdP = Integer.parseInt(inputs[2]);
ProbabilityCalculator calculator = new ProbabilityCalculator();
int p = 0;
int targetCardNum = 0;
for (int cardNum = 1; cardNum <= deckNum; cardNum++) {
p = (int)(calculator.getDrawCardProbability(deckNum, drawNum, cardNum) * 100);
if(p >= thresholdP) {
targetCardNum = cardNum;
break;
}
}
// 標準出力
System.out.println(caseNumStr);
System.out.println(targetCardNum);
// テキストファイルとして書き込み処理
writer.write(caseNumStr);
writer.newLine();
writer.write(targetCardNum);
writer.newLine();
}
// テキストファイルをフラッシュ
writer.flush();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
// 各IOインスタンスのクローズ処理
try {
if (reader != null)
reader.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
if (reader != null)
writer.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
if (fr != null)
fr.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
if (reader != null)
fw.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
提出情報
提出出力結果
テストケース情報