早教吧作业答案频道 -->其他-->
acm题,wronganswer,为什么?DescriptionJames得到了一堆有趣的硬币,于是决定用这些硬币跟朋友们玩个小游戏.在一个N行M列的表格上,每一个第i行第j列的格子上都放有一枚James的硬币,抛该硬币正面朝
题目详情
acm题,wrong answer,为什么?
Description
James得到了一堆有趣的硬币,于是决定用这些硬币跟朋友们玩个小游戏.在一个N行M列的表格上,每一个第i行第j列的格子上都放有一枚James的硬币,抛该硬币正面朝上的概率为Pij,所有抛硬币事件两两之间是相互独立的.
现在,玩家在M列硬币中,从每一列里各选择1枚,共M枚,构成一组.如此重复选择N组出来,且保证被选择过的硬币不能再选.选好组之后,每组的M枚硬币各抛一次,如果都是正面朝上,则该组胜利,总分赢得1分;否则该组失败,总分不加也不减.请问,如果让你自行选择硬币的分组,游戏总得分的数学期望的最大值是多少?
Input
输入有多组数据.每组数据第一行为N和M,1≤N≤100,1≤M≤10,以空格分隔.接下来有N行,每行M个小数,表示表格中对应的Pij.
输入以N=M=0结束,这组数据不输出结果.
Output
对于每组数据,输出对应游戏总得分的数学期望的最大值,四舍五入精确至4位小数.每组数据的输出占一行.
代码:
#include
#include
#include
#define N 101
#define M 11
int compare(const void *a,const void *b)
{
\x05return *(int*)b-*(int*)a;
}//
int main()
{
\x05float a[M][N]={};
\x05int m=0,
\x05\x05n=0;
\x05int i,j;
\x05float sum,Sum;
\x05while(scanf("%d %d",&n,&m) = EOF && m = 0 && n = 0)//***有可能会出错 ***
\x05{//大循环
\x05\x05sum=1;Sum=0;//初始化
\x05\x05memset(a,0,sizeof(a));
\x05\x05for(j=0;j
Description
James得到了一堆有趣的硬币,于是决定用这些硬币跟朋友们玩个小游戏.在一个N行M列的表格上,每一个第i行第j列的格子上都放有一枚James的硬币,抛该硬币正面朝上的概率为Pij,所有抛硬币事件两两之间是相互独立的.
现在,玩家在M列硬币中,从每一列里各选择1枚,共M枚,构成一组.如此重复选择N组出来,且保证被选择过的硬币不能再选.选好组之后,每组的M枚硬币各抛一次,如果都是正面朝上,则该组胜利,总分赢得1分;否则该组失败,总分不加也不减.请问,如果让你自行选择硬币的分组,游戏总得分的数学期望的最大值是多少?
Input
输入有多组数据.每组数据第一行为N和M,1≤N≤100,1≤M≤10,以空格分隔.接下来有N行,每行M个小数,表示表格中对应的Pij.
输入以N=M=0结束,这组数据不输出结果.
Output
对于每组数据,输出对应游戏总得分的数学期望的最大值,四舍五入精确至4位小数.每组数据的输出占一行.
代码:
#include
#include
#include
#define N 101
#define M 11
int compare(const void *a,const void *b)
{
\x05return *(int*)b-*(int*)a;
}//
int main()
{
\x05float a[M][N]={};
\x05int m=0,
\x05\x05n=0;
\x05int i,j;
\x05float sum,Sum;
\x05while(scanf("%d %d",&n,&m) = EOF && m = 0 && n = 0)//***有可能会出错 ***
\x05{//大循环
\x05\x05sum=1;Sum=0;//初始化
\x05\x05memset(a,0,sizeof(a));
\x05\x05for(j=0;j
▼优质解答
答案和解析
#include
#include
#define N 101
#define M 11
// 需要直接比较double,而不能返回差值
int compare(const void *a, const void *b)
{
double* da = (double*)a;
double* db = (double*)b;
if (*da > *db) {
return -1;
}
else if (*db > *da) {
return 1;
}
return 0;
}//
int main()
{
double a[M][N];
int m = 0,
n = 0;
int i, j;
double sum, Sum;
while (scanf("%d %d", &n, &m) != EOF && m != 0 && n != 0)//***有可能会出错 ***
{//大循环
sum = 1; Sum = 0;//初始化
for (j = 0; jfor (i = 0; i < m; i++)
scanf("%lf", &a[i][j]);//输入
for (i = 1; i <= m; i++)
qsort(a[i], m, sizeof(double), compare);//从大到小排序
for (j = 0; j{
for (i = 1; i <= m; i++)
sum *= a[i][j];
Sum += sum;
sum = 1;//初始化
}
printf("%.4f\n", Sum);
}//大循环
}
主要问题出在比较函数上
#include#include
#include
#define N 101
#define M 11
// 需要直接比较double,而不能返回差值
int compare(const void *a, const void *b)
{
double* da = (double*)a;
double* db = (double*)b;
if (*da > *db) {
return -1;
}
else if (*db > *da) {
return 1;
}
return 0;
}//
int main()
{
double a[M][N];
int m = 0,
n = 0;
int i, j;
double sum, Sum;
while (scanf("%d %d", &n, &m) != EOF && m != 0 && n != 0)//***有可能会出错 ***
{//大循环
sum = 1; Sum = 0;//初始化
for (j = 0; j
scanf("%lf", &a[i][j]);//输入
for (i = 1; i <= m; i++)
qsort(a[i], m, sizeof(double), compare);//从大到小排序
for (j = 0; j
for (i = 1; i <= m; i++)
sum *= a[i][j];
Sum += sum;
sum = 1;//初始化
}
printf("%.4f\n", Sum);
}//大循环
}
看了 acm题,wrongansw...的网友还看了以下:
高一一道证明题已知S是两个整数平方和的集合,即S={x|x=m^2+n^2},m、n∈Z求证:1、 2020-05-13 …
若s代表路程,t代表时间,在代数式s=20t中,s,t是——量,20是——量,t是——量,——是因 2020-05-14 …
甲乙两地相距30千米,某人计划th到达,如果提前1h到达,那么此人应提速.A.0/t—1—30/t 2020-05-23 …
用以下英文宇母填在上a,a,a,a,a,a,b,e,e,d,e,e,e,e,e,e,f,g,g用以 2020-06-24 …
一道线代题目:设A是一个m×n矩阵,r(A)=r…从A中任意划去m-s行与n-t列,其余元素按原来 2020-07-14 …
实验测得,从150cm高处自由下落的物体的下落时间t(s)与相应的高度h(m)、速度v(m/s)间 2020-07-19 …
谁能帮我组个英语单词①e、n、o、p、t、w、y②e③d、t、y④b、c、f、m、p、r、t、v⑤ 2020-07-29 …
高斯过程求期望如果X1(t),X2(t),X3(t),X4(t)都是高斯随机过程那么E[X1(t)X 2020-10-31 …
已知质点运动方程为r(t)=x(t)i+y(t)j其中x(t)=(m/s)t+2m,y(t)=(1/ 2020-11-01 …
已知加速度a(m/s)和时间t(s)求加速度路程s与a和t之间的函数关系已知减速度v(m/s)和原速 2020-12-09 …