输入包含两行,第一行输入三个整数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 } }