某人有8角的邮票5张,1元的邮票4张,1元8角的邮票6张,用这些邮票中的一张或若干张可以得到多少中不同的邮资?
两种思路:
1.用数组方式,先求总数,然后排序,然后去掉重复数据,之后消除0,最后输出,求得不同的个数。
2.直接用容器,比较简单。
1.
#include <iostream>using namespace std;void sort(float a[],int n){ float temp; for(int i=0;i<n;++i) for(int j=i;j<n;++j) { if(a[i]>=a[j]) { temp=a[i]; a[i]=a[j]; a[j]=temp; } }}int main(){ int sum=0; float s[1000]; float s1[1000]; for(int i=0;i<=5;++i) { for(int j=0;j<=4;++j) { for(int k=0;k<=6;++k) { s[sum++]=0.8*i+j+1.8*k; } } } for(int p=0;p<sum;++p) cout<<s[p]<<" "; cout<<endl<<"总数:"<<sum<<endl; sort(s,sum); for(int b=0;b<sum;++b) cout<<s[b]<<" ";// cout<<endl<<"排好序:"<<sum<<endl; cout<<endl; //去除0 int u=0; for(int d=0;d<sum;++d) { if(s[d]!=s[d+1]&&s[d]!=0) s1[u++]=s[d]; } for(int m=0;m<u;++m) cout<<m<<" "<<s1[m]<<endl; cout<<endl<<"去除0:"<<u<<endl; return 0;}2.
#include <iostream>#include <set>using namespace std;int main(){ set<float> fset;//double不精确 int i,j,k,count; for(i=0;i<=5;++i) for(j=0;j<=4;++j) for(k=0;k<=6;++k) fset.insert(0.8*i+1*j+1.8*k); cout<<"总数:"<<fset.size()<<endl; set<float>::iterator it; cout<<"去除重复和0:"<<endl; for(count=1,it=fset.begin();it!=fset.end();++it,++count) cout<<count<<" "<<*it<<endl; return 0;}
新闻热点
疑难解答