题目描述
某人有8 角的邮票5 张,1 元的邮票4 张,1 元8 角的邮票6 张,用这些邮票中的一张或若干张可以得到多少中不同的邮资?
我的题解:
三个for循环记录所有可能的和值
#include <iostream> #include <vector> #include <algorithm> using namespace std; class project{ public: void kindtatol(){ vector<int> you1={8, 16, 24, 32, 40}; vector<int> you2={10, 20, 30, 40}; vector<int> you3={18, 36, 54, 72, 90, 108}; vector<int> totle1(0); vector<int>::size_type i,j,k; int num=0; for( i=0; i<you1.size(); i++){ for( j=0; j<you2.size(); j++){ for(k=0; k<you3.size(); k++){ totle1.push_back(you1[i]); totle1.push_back(you2[j]); totle1.push_back(you3[k]); totle1.push_back(you1[i]+you2[j]); totle1.push_back(you1[i]+you3[k]); totle1.push_back(you2[j]+you3[k]); totle1.push_back(you1[i]+you2[j]+you3[k]); } } } sort(totle1.begin(), totle1.end()); auto q = unique(totle1.begin(), totle1.end()); for(auto p=totle1.begin(); p!=q; p++){ num++; } cout << num << endl; } }; int main() { project P; P.kindtatol(); return 0; }
算法效率: