输入包含两行,第一行输入三个整数a1,b1,c1(1≤a1,b1,c1≤13),表示牛牛亮出的扑克牌。第二行输入三个整数a2,b2,c2(1≤a2,b2,c2≤13),表示妞妞所亮出的扑克牌。
输出一个数字x(保留4位小数),表示牛牛获胜的概率。
3 5 7 2 6 8
0.3995
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner in = new Scanner(System.in);
//DecimalFormat dec = new DecimalFormat("0.0000");
int t = 0;
int[] data = new int[14];
for(int i=0;i<13;i++){
data[i] = 4;
}
int sum1=0,sum2=0;
double sum=0,res=0;
for(int i=0;i<3;i++){
t = in.nextInt();
data[t-1]--;
sum1+=t;
}
for(int i=0;i<3;i++){
t = in.nextInt();
data[t-1]--;
sum2+=t;
}
int diff = sum1 - sum2;
if(diff>=13){
System.out.printf("%.4f\n",1.0000);
return;
}
if(diff<=-13){
System.out.printf("%.4f\n",0.0000);
return;
}
if(diff<=0){
for(int i=0;i<13;i++){
for(int j=i-diff+1;j<13;j++){
sum+=data[i]*data[j];
//System.out.print((i+1)+"-->"+(j+1)+" ");
}
}
res = sum/(46*45);
//String result = dec.format(res);
System.out.printf("%.4f\n",res);
return;
}
if(diff>0){
for(int i=0;i<13;i++){
if(i+diff<13){
for(int j=0;j<i+diff;j++){
if(j==i){
t = data[j]-1;
sum+=data[i]*t;
}
else sum+=data[i]*data[j];
}
}
else{
for(int j=0;j<13;j++){
if(j==i){
t = data[j]-1;
sum+=data[i]*t;
}
else sum+=data[i]*data[j];
}
}
}
res = sum/(46*45);
System.out.printf("%.4f\n",res);
return;
}
in.close();
}
}
编程小白只会这样码代码。。。 import java.util.*;
public class Main{
public static void main(String[] args){
HashMap<Integer,Integer> map=new HashMap<Integer,Integer>();
for(int i=1;i<=13;i++){
map.put(i,4);
}
int sum1=0;
int sum2=0;
Scanner sc=new Scanner(System.in);
for(int i=0;i<6;i++){
Integer key=sc.nextInt();
if(i<3)
sum1+=key;
else
sum2+=key;
map.put(key,map.get(key)-1);
}
int num=0;
for(Map.Entry<Integer,Integer> M:map.entrySet()){
if(M.getValue()==0)
continue;
map.put(M.getKey(),M.getValue()-1);//这里的M.getValue() 会取到跟新后的值
for(Map.Entry<Integer,Integer> m:map.entrySet()){
if(m.getValue()==0)
continue;
if(m.getKey()+sum2<M.getKey()+sum1)
num+=m.getValue()*(M.getValue()+1);//千万注意这里 刚拿走一 这里要加上
}
map.put(M.getKey(),M.getValue()+1);//拿走后 这里要加上
}
System.out.printf("%.4f\n", num*1.0/(46*45));
}
}
import java.util.*;
public class CardProb {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int num[] = new int[14], accum[] = new int[14], sum, i, dif, tem;
sum = dif = 0;
Arrays.fill(num, 1, 14, 4);//共有13个数字,每个数字有4张
for (i = 0; i < 6; ++i) {
tem = sc.nextInt();
num[tem]--;
dif += (i < 3 ? tem : -tem);//计算亮出6张后两边的数字和之差
}
for (i = 1; i < 14; ++i)
accum[i] = accum[i-1] + num[i];//accum[i]:6张外小于等于i的牌的张数
if (dif > 0) {
for (i = 1; i < 14; ++i)//dif大于0时要减掉牛牛拿的最后一张
sum += (accum[Math.min(13, i+dif-1)] - 1) * num[i];
} else {
for (i = 1; i < 14; ++i)//dif小于等于0时不必考虑牛牛的最后一张
sum += accum[Math.max(0, i+dif-1)] * num[i];
}
System.out.printf("%.4f\n", (double)sum / (45 * 46));//45,46=52-7,6
}
}