输入包含两行,第一行输入三个整数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){ 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)); } }
#include <iostream>
#include <algorithm>
#include <vector>
#include <iomanip>
using namespace std;
int main()
{
int a[3]={0};
int b[3]={0};
while(cin>>a[0])
{
cin>>a[1]>>a[2];
cin>>b[0]>>b[1]>>b[2];
vector<int> num(14,4);
int suma=0,sumb=0;
for(int i=0;i<3;i++)
{
num[b[i]]--;
num[a[i]]--;
suma+=a[i];
sumb+=b[i];
}
int dist=sumb-suma;
double out=0;
int tp=abs(dist);
if(dist>=0)
{
for(int i=1;i<=13;i++)
{
int cnt=0;
for(int j=i+tp+1;j<=13;j++)
cnt+=num[j];
out+=num[i]*cnt;
}
}
else
{
for(int i=1;i<=13;i++)
{
int cnt=0;
for(int j=i+tp;j<=13;j++)
cnt+=num[j];
out+=num[i]*cnt;
}
}
out/=(46*45);
if(dist>=0)
cout<<setprecision(4)<<setiosflags(ios::fixed)<<out<<endl;
else
cout<<setprecision(4)<<setiosflags(ios::fixed)<<1.0-out<<endl;
}
}
a=list(map(int,input().strip().split())) b=list(map(int,input().strip().split())) nums=[4 for i in range(14)] nums[0]=0 for i in range(3): nums[a[i]]-=1 nums[b[i]]-=1 #得到每张牌的剩余数 difference=sum(a)-sum(b) temp=[0 for i in range(14)] for i in range(1,14): temp[i]=temp[i-1]+nums[i] sum=0 if difference>0: for i in range(1,14): sum+=(temp[min(13,i+difference-1)]-1)*nums[i] else: for i in range(1,14): sum+=(temp[max(0,i+difference-1)])*nums[i] print('%.4f'%(sum/2070.0))
#include <stdio.h> int main() { int a[4]; int b[4]; int cont[14]; int sum = 0; float p; scanf("%d %d %d",&a[1],&a[2],&a[3]); scanf("%d %d %d",&b[1],&b[2],&b[3]); for(int i =1; i<=13; i++) { int cont1 = 0; for(int j=1 ;j<=3; j++){ if((a[j] == i)) cont1++; if((b[j] == i)) cont1++; } cont[i] = cont1; } for(int i=1; i<=13; i++){ for(int j=1; j<=13; j++) { if(a[1]+a[2]+a[3]+i>b[1]+b[2]+b[3]+j){ if(i == j) sum = sum +(4-cont[i])*(4-cont[j]-1); else sum = sum +(4-cont[i])*(4-cont[j]); } } } p = (float)sum/(46*45); printf("%.4f\n",p); }
temp = [0]*14 while(1): c = 1 a = list(map(int, input('牛牛:').split())) b = list(map(int, input('妞妞:').split())) nums = [4] * 14 nums[0] = 0 for i in a+b: nums[i] -= 1 if nums[i]<0: print('输入有误,同一大小的牌不能多于四张') c = 0 break if c==0: continue else: break for i in range(1, 14): temp[i] += temp[i-1] + nums[i] s = 0 d = sum(a)-sum(b) if d > 0: for i in range(1, 14): s += (temp[min(i+d-1, 13)]-1)*nums[i] else: for i in range(1, 14): s += temp[max(i+d-1, 0)]*nums[i] res = 1.0*s/2070.0 print('%.4f' % res)
#include <iostream> using namespace std; int count(int p[],int val,int len){ int total=0; if(val <0) return 0; if(val >= len){ for(int i=12;i>=0;--i){ total += p[i]; } return total; } else{ for(int i=val;i>=0;--i){ total += p[i]; } return total; } } int main(){ int nums[13] = {4,4,4,4,4,4,4,4,4,4,4,4,4}; int a1,a2,b1,b2,c1,c2; cin>>a1>>b1>>c1; cin>>a2>>b2>>c2; nums[a1-1]--; nums[b1-1]--; nums[c1-1]--; nums[a2-1]--; nums[b2-1]--; nums[c2-1]--; int diff = a1+b1+c1-a2-b2-c2; int total_count=0; for(int i=12;i>=0;--i){ if(nums[i] > 0){ nums[i]--; total_count += ((nums[i]+1) * count(nums,i+diff-1,13)); nums[i]++; } else{ continue; } } printf("%.4f",((double)total_count)/(46*45)); return 0; }
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(); } } 编程小白只会这样码代码。。。
n = 46 cnt = [4 for i in range(14)] x1 = list(map(int, input().split())) x2 = list(map(int, input().split())) for x in x1 + x2: cnt[x] -= 1 k = sum(x2) - sum(x1) ans = 0.0 up, down = 0, n*(n-1) if k>=0: for i in range(1, 14): for j in range(i+k+1, 14): up += cnt[i]*cnt[j] else: for i in range(1, 14): t = cnt[i] s = max(i+k+1, 1) cnt[i] -= 1 for j in range(s, 14): up += cnt[j] * t cnt[i] += 1 ans = up*1.0 / down print('%.4f' % ans)
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 } }
import java.util.Formatter;
import java.util.Scanner;
public class NiuNiuAndNiuNiu2 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (sc.hasNext()) {
int[] dp = new int[14];
int[] num1 = new int[3];
int sum1 = 0;
for (int i = 0; i < num1.length; i++) {
num1[i] = sc.nextInt();
dp[num1[i]]++;
sum1 += num1[i];
}
int[] num2 = new int[3];
int sum2 = 0;
for (int i = 0; i < num2.length; i++) {
num2[i] = sc.nextInt();
dp[num2[i]]++;
sum2 += num2[i];
}
double valid = 0;
double chance = 0;
for (int i = 1; i <= 13; i++) {
if (dp[i] == 4) {
continue;
} else {
dp[i]++;
for (int j = 1; j <= 13; j++) {
if (dp[j] == 4) {
continue;
} else {
chance++;
if (sum1 + i > sum2 + j) {
valid++;
}
}
}
dp[i]--;
}
}
double res = valid / chance;
System.out.println(new Formatter().format("%.4f", res).toString());
}
sc.close();
}
}