为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C++
倚天杖 2023-03-03 09:05:25
求助:这个编程要求是“某人有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个元素;
查看完整描述

1 回答

?
神不在的星期二

TA贡献1963条经验 获得超6个赞

搞定了
int main()
{
vector<int> money;
int temp;
for(int i=0;i<=5;i++) 
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;
}

查看完整回答
反对 回复 2023-03-06
  • 1 回答
  • 0 关注
  • 47 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信