输出中有两个数字
344.6
563.4
455.6
10.7
10.6
1
最后两个节目
[0] 10.000000000000000 double
[1] 10.000000000000000 double
在visual studio express 2015中的locals变量中,
repRate[0]==repRate[1]
true
为什么呢?我试过用(双)来确定。输出给出了两个不同的数字,但repRate [0] == repRate [1]返回true。
this is the input.
5
1 10 3456
2 10 5644
3 10 4566
4 20 234
5 20 232
五表示你有5个项目,1个是id代码,10是初始号码,3456是最终号码。重现率为(3456-10)/ 10,我需要使用重现率作为索引对数组进行排序。
#include <iostream>
using namespace std;
int main() {
int n;
int a[110][4];
double repRate[110];
//input
cin >> n;
for (int i = 0; i < n;i++) {
cin >> a[i][0] >> a[i][1] >> a[i][2];
}
//rep rate
for(int i = 0;i < n;i++){
repRate[i] = (double) ((double)a[i][2]- (double)a[i][1]) / (double)a[i][1];
cout << repRate[i] << endl;
}
//sort
for (int i = 0;i < n;i++) {
for (int j = 0;j < n - i-1;j++) {
int temp[5];
int rtemp;
if (repRate[j]>repRate[j+1]) {
rtemp = repRate[j+1];
repRate[j + 1] = repRate[j];
repRate[j] = rtemp;
for (int k = 0;k < 4;k++) {
temp[k] = a[j+1][k];
}
for (int k = 0;k < 4;k++) {
a[j+1][k] = a[j][k];
}
for (int k = 0;k < 4;k++) {
a[j][k] = temp[k];
}
}
}
}
int test;
test = repRate[0] == repRate[1];
cout << test;
return 0;
}
答案 0 :(得分:2)
尝试将rtemp
设置为加倍,因为此行:
rtemp = repRate[j+1];
会削减一些准确性。如果没有启用警告,这应该是对编译器的警告!
之后输出如下:
5
1 10 3456
2 10 5644
3 10 4566
4 20 234
5 20 232
344.6
563.4
455.6
10.7
10.6
0
其中0是你想要的。