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