我想按单价对金块进行排序,所以我用变量quant和price制作了一个金块类,然后制作了一个双单位,即price / quant。矿块分为4、6和9包
当我分别输入10、10和10的价格时,我应该得到一个排序为9pack,6pack和4pack的数组,因为10/9小于10/6和10/4。但是事实并非如此。
#include <iostream>
using namespace std;
class Nugget {
public:
int price;
int quant;
double unit;
Nugget(int price, int quant) {
this->price = price;
this->quant = quant;
this->unit = price/quant;
}
};
int main(){
int n4,n6, n9;
cin >> n4 >> n6 >> n9;
Nugget* nuggetArr[3] = {new Nugget(n4,4), new Nugget(n6,6), new Nugget(n9,9)};
for (int i = 0; i < 3; ++i) {
for (int j = 0; j < 3; ++j) {
if (nuggetArr[j]->unit > nuggetArr[i]->unit) {
Nugget* temp = nuggetArr[i];
nuggetArr[i] = nuggetArr[j];
nuggetArr[j] = temp;
}
}
for (int j = 0; j < 3; j++)
cout << nuggetArr[j]->quant << ' ';
cout << endl << endl;
}
for (int i = 0; i<3; ++i)
cout << nuggetArr[i]->quant << ' ';
return 0;
};
答案 0 :(得分:0)
您要使用什么sorting algorithm?
如果将nuggetArr[i]
换成nuggetArr[j]
,则应确保i < j
升序或i > j
降序。
例如:
for (int i = 0; i < 3; ++i) {
for (int j = i + 1; j < 3; ++j) {
if (nuggetArr[j]->unit > nuggetArr[i]->unit) {
Nugget* temp = nuggetArr[i];
nuggetArr[i] = nuggetArr[j];
nuggetArr[j] = temp;
}
}
您的代码在对象(块)周围移动,没有保持一定顺序。
例如,将nuggetArr[1]
交换为nuggetArr[2]
,然后将nuggetArr[2]
交换为nuggetArr[1]
。
仅供参考,这类似于Selection sort。
答案 1 :(得分:0)
C ++在这里使用了多种转换方式。在分配之前,它一直使用整数,因此即使您使用double,单位值也将是整数。如果您进行以下更改,您会发现它会起作用(请注意,这只是为了说明要点,由于精度原因,不适合使用它)
...
double price;
double quant;
...
this->unit = this->price/this->quant;
...
希望这会有所帮助
作为一个更准确的说明,如果a,b是整数,则默认情况下a / b将是整数,并且除以后仅将其转换为双精度。