求助:这个编程要求是“某人有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;
}
- 1 回答
- 0 关注
- 64 浏览
添加回答
举报
0/150
提交
取消