返回信息流链接地址
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int count = 0;//每组数据中的选手数目
int casecount = 0;//数据组数
String result = "";
outer:
while((count = sc.nextInt()) != 0){
casecount++;
double[][] scores = new double[count][8];//共count行,每一行有八个元素,代表某个选手所有可能得分情况
int[] rank = new int[count]; //各ID的排名
double[] totals = new double[count];
for(int i = 0; i < count; i++){
//记录每位选手的可能分数,求和,并且把所有可能总分都记录下来
double total = 0.0;
for(int j = 4; j <= 6; j++){
scores[i][j] = sc.nextDouble();
total += scores[i][j];
}
scores[i][0] = total;
scores[i][7] = 0.0;
scores[i][1] = scores[i][4] + scores[i][5];
scores[i][2] = scores[i][4] + scores[i][6];
scores[i][3] = scores[i][5] + scores[i][6];
//对所有可能分数按照从小到大的顺序进行排序(只需要排中间的六个元素)
for(int k = 2; k <= 6; k++){
double key = scores[i][k];
int l;
for(l = k - 1; scores[i][l] < key; --l){
scores[i][l + 1] = scores[i][l];
}
scores[i][l + 1] = key;
}
}
//读取排名数据
for(int m = 0; m < count; m++){
rank[m] = sc.nextInt() - 1;
}
//计算得分情况
totals[0] = scores[rank[0]][0];
for(int n = 1; n <= count - 1; n++){
int p = 0;
if(rank[n] > rank[n - 1]){
for(p = 0; scores[rank[n]][p] > totals[n - 1] && p < 8; p++){
continue;
}
}
else{
for(p = 0; scores[rank[n]][p] >= totals[n - 1] && p < 8; p++){
continue;
}
}
if(p == 8){
result += String.format("Case %d:No solution\n",casecount);
continue outer;
}
else{
totals[n] = scores[rank[n]][p];
}
}
result += String.format("Case %d:%.2f\n",casecount,totals[count - 1]);
}
System.out.print(result);
}
public static void swap(double[] array, int a, int b){
double temp = array[a];
array[a] = array[b];
array[b] = temp;
}
}
这是一条镜像帖。来源:北邮人论坛 / java / #15963同步于 2010/10/13
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖
1002求助(Java版)
DestinyOwner
2010/10/13镜像同步5 回复
订阅后,新回复会通过你的通知中心匿名送达。
5 条回复
double[] totals = new double[count];
for(int i = 0; i < count; i++){
//记录每位选手的可能分数,求和,并且把所有可能总分都记录下来
- int total = 0;
+ double total = 0; // 我猜是这里。总和不一定是整数。
for(int j = 4; j <= 6; j++){
scores[i][j] = sc.nextDouble();
total += scores[i][j];
}
还是不对,哎,到底错在哪里?
【 在 wks (cloverprince) 的大作中提到: 】
: double[] totals = new double[count];
: for(int i = 0; i < count; i++){
: //记录每位选手的可能分数,求和,并且把所有可能总分都记录下来
: ...................