【朝answer】acm题wronganswer为什么?DescriptionJames得到了一...
答案:2 悬赏:70 手机版
解决时间 2021-03-05 12:51
- 提问者网友:心牵心
- 2021-03-05 01:14
【朝answer】acm题wronganswer为什么?DescriptionJames得到了一...
最佳答案
- 五星知识达人网友:冷風如刀
- 2021-03-05 01:40
【答案】 主要问题出在比较函数上
#include<stdio.h>#include<stdlib.h>#include<string.h>#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<n; j++)for (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<n; j++){for (i = 1; i <= m; i++)sum *= a[i][j];Sum += sum;sum = 1;//初始化 }printf("%.4f\n", Sum);}//大循环 } 追问: 我是在网上学的这个compare函数的写法;而且在cfree上也是可以正确的运行的!是不是cfree的编译器和acm的编译器不太一样啊!那我该用什么软件来测试acm的题呢?求大牛推荐一下!!! 追答: 因为double作减法以后是一个double,这个double如果是-1到1之间的话,转换成int以后就是0
返回0意味着你告诉编译器两个double是等价的(即先后不分),但是其实这不是你想要的结果
#include<stdio.h>#include<stdlib.h>#include<string.h>#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<n; j++)for (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<n; j++){for (i = 1; i <= m; i++)sum *= a[i][j];Sum += sum;sum = 1;//初始化 }printf("%.4f\n", Sum);}//大循环 } 追问: 我是在网上学的这个compare函数的写法;而且在cfree上也是可以正确的运行的!是不是cfree的编译器和acm的编译器不太一样啊!那我该用什么软件来测试acm的题呢?求大牛推荐一下!!! 追答: 因为double作减法以后是一个double,这个double如果是-1到1之间的话,转换成int以后就是0
返回0意味着你告诉编译器两个double是等价的(即先后不分),但是其实这不是你想要的结果
全部回答
- 1楼网友:话散在刀尖上
- 2021-03-05 02:52
谢谢解答
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯