亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

不知到底是哪里出現了問題,是不是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 關注
  • 83 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號