某人有 8 角的邮票 5 张,1 元的邮票 4 张,1元 8 角的邮票 6 张,用这些邮票中的一张或若干张可以得到多少种不同的邮资?
分析思路,此题就是暴力搜索,没有什么捷径,但是输入的时候每次 都要对这些邮票的价格进行去重,所以我们可以选择用set容器来存储,这样可以实现去重。
但是如果以元为单位,出现浮点数,比较起来不精确会有重复的数据出现,所以要以角为单位。
#include<iostream>
#include<set>
using namespace std;
int main(){
set<double> se;
int count=0;
cout<<"可以组成的钞票额度为"<<endl;
for(int i=0;i<=5;i++)
for(int j=0;j<=4;j++)
for(int k=0;k<=6;k++){
cout<<i*0.8+j+k*1.8<<endl;
se.insert(i*0.8+j+k*1.8);
count++;
}
cout<<endl<<"一共组成了:"<<count<<"种钞票数额"<<endl;
set<double>::iterator it;
for(it=se.begin();it!=se.end();it++)
cout<<(*it)<<" "<<endl;
cout<<"一共组成了"<<se.size()<<"种钞票"<<endl;
}
这种方式的运行结果是
而采用整数存储的方式为
#include<iostream>
#include<set>
using namespace std;
int main(){
set<int> se;
int count=0;
cout<<"可以组成的钞票额度为"<<endl;
for(int i=0;i<=5;i++)
for(int j=0;j<=4;j++)
for(int k=0;k<=6;k++){
cout<<i*8+j*10+k*18<<endl;
se.insert(i*8+j*10+k*18);
count++;
}
cout<<endl<<"一共组成了:"<<count<<"种钞票数额"<<endl;
set<int>::iterator it;
for(it=se.begin();it!=se.end();it++)
cout<<(*it)<<" "<<endl;
cout<<"一共组成了"<<se.size()<<"种钞票"<<endl;
}