不知到底是哪里出现了问题,是不是unique有误?请赐教。

求助:这个编程要求是“某人有8角的邮票5张,1元的邮票4张,1元8角的邮票6张,用这些邮票中的一张或若干张可以得到多少种不同的邮资? ”,我编出的程序如下:

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;

void main()
{
vector<double> money;
double temp;
for(int i=0;i<=5;i++)
for(int j=0;j<=4;j++)
for(int k=0;k<=6;k++)
{
temp=0.8*i+j+1.8*k;
money.push_back(temp);
}

//去除重复元素
sort(money.begin(),money.end());
vector<double>::iterator end_uni= unique(money.begin(),money.end());
money.erase(end_uni,money.end());

cout<<"money中元素个数:"<<money.size()<<endl;
for(int x=0;x<money.size();x++) //输出money中的元素
cout<<money[x]<<" ";
cout<<endl;

}

但是大家看结果的话,可以看出有以下元素重复了: 6.4 6.8 7.4 7.8 8.2 8.6 9.6 10.6 11.6 12.6 13.2 13.6 14.2 14.6 15.2 16.2,正确的答案应该是money中含83个元素;

倚天杖
浏览 48回答 1
1回答

神不在的星期二

搞定了int main(){vector<int> money;int temp;for(int i=0;i<=5;i++)&nbsp;for(int j=0;j<=4;j++)for(int k=0;k<=6;k++){temp=8*i+10*j+18*k; //放大10倍,变成整数来存储,否则后面的程序因浮点数的不精确问题,会导致比较数据出现误差!!money.push_back(temp);}//去除重复元素sort(money.begin(),money.end());vector<int>::iterator end_uni= unique(money.begin(),money.end());money.erase(end_uni,money.end());cout<<"money中元素个数:"<<money.size()<<endl;for(unsigned int x=1;x<money.size();x++) //输出money中的元素 应该去除0金额的,因为最少会有一张{cout<<money[x]/10.0<<" "; //转换成小原金额输出if ( x %10 == 0 ) cout << endl ; //每10个换一次行}cout << endl ;return 0;}
打开App,查看更多内容
随时随地看视频慕课网APP