csuoj1009
AC代码:
#include <iostream>
#include <iomanip>
using namespace std;
//计算数学期望值,可以自己直接通过数组的方式来实现
double haha[105][105];
int main()
{
//memset(haha,0,sizeof(haha));
int a,b;
while(cin>>a>>b&&(a||b))
{
for(int i = 0; i < a; i++){
for(int j = 0; j < b; j++){
cin>>haha[i][j];
}
}
//我现在的思路是将小的和小的相乘,所以最基本的要求就是排序,但是最后可以发现,排序失败了
for(int t = 0;t < b;t++){
for(int r = 1;r < a; r++)
for(int e = r;e > 0 ; e--)
if(haha[e][t] > haha[e-1][t]){
double temp = haha[e-1][t];
haha[e-1][t] = haha[e][t];
haha[e][t] = temp;
}
}
//将结果打印吧
/* for(int d =0;d<a;d++)
{for(int s = 0;s <b;s++)
cout<<haha[d][s]<<" ";cout<<endl;}*/
//排好顺序后就将结果全部保存到第一个中间
for(int w = 0; w <a;w++){
for(int y = 1; y <b;y++){
haha[w][0] *=haha[w][y];
}}
double zhangjie = 0;
for(int v = 0;v < a;v++)zhangjie+=haha[v][0];
cout<<fixed<<setprecision(4)<<zhangjie<<endl;
}
return 0;
}
本来这道题想法都很清楚了,在写的过程中发现保存变量的类型出了问题,结果就是改来改去还是没有全部改正过来,只好一步步的调试,走到最后AC。想说的就是使用二维数组的时候行与列之间的顺序到后来已经非常的混乱了,这个东西在以往也遇见过许多次,所以以后还是得好好练练这方面的东西了