PAT乙级-1056. 组合数的和(15)
2018-01-18 11:04
225 查看
1.题目:
2.分析题目:
首先,一定要仔细分析题目。题中说要求所有可能组合出来的2位数字的和。还给出了例子。另外,输入时,会给出N个不同的非0的数字,以空格分隔。那么,我们应该如何构造所有可能的两个个位数的两位数组合呢?3.解决思路:
首先,我们要在内心里坚定一个信念。计算机技术是以数学为基础的,是以图灵机为基本模型的。所以我们在解决计算机世界的问题的时候,完全可以套用解决数学问题的套路。这里我们只需要一个很简单的推演,如下图:思路十分地简单,如果你有排列组合相关的知识,这个图多不用看。你自然而然地知道排列与组合之间的差别就在于有无顺序。当我们明白了这样一个浅显的道理之后,我们就可以开始答题了。
4.代码
#include <iostream> #include <vector> using namespace std; int main(int argc, char** argv) { vector<int> nums;// 承装所有数字的数组 int n; cin>>n; // 初始化所有的原始数字 while(n--){ int temp; cin>>temp; nums.push_back(temp); } vector<int> addNums;// 所有进行排列组合后得到的数 vector<int>::iterator it =nums.begin(); // 进行双层遍历,从左到右进行,因为两个数字的搭配只有ab 或者 ba 这两种情况,所以可以只从左到右遍历一遍 for(;it!=nums.end();++it) { vector<int>::iterator it_behind = nums.begin(); // 将游标移动到主游标的后面 for(;it_behind!=it;it_behind++){} it_behind++; // 开始遍历 for(;it_behind!=nums.end();it_behind++){ addNums.push_back(*it*10+*it_behind); addNums.push_back(*it_behind*10+*it); } } vector<int>::iterator set_it = addNums.begin(); int result=0; // 使用迭代器遍历,获得最终求和结果 for(;set_it!=addNums.end();set_it++){ result+=*set_it; } cout<<result; return 0; }
5.一些闲话
对于刷题的世界我也只是刚刚开始,所以有一些地方可能不是那么完美,请见谅。比如这一次的代码我就是抱着可能无法ac的心情写完的。结果却通过了,变量命名似乎不是很规范,不过,相信我,我已经尽力了。下一次我会做得更好,其实编程就是这样,永远相信下一次可以做得更好。加油相关文章推荐
- PAT训练(乙级)—— 1056. 组合数的和(15)
- pat乙级1056. 组合数的和(15)
- PAT乙级 1056. 组合数的和(15)
- 1056. 组合数的和(15) PAT乙级真题
- PAT乙级1056. 组合数的和(15)
- 1056. 组合数的和(15) PAT 乙级
- pat 乙级 1056. 组合数的和(15)
- PAT 乙级 1056.组合数的和(15)
- 乙级 PAT 1056. 组合数的和(15)
- [PAT乙级]1056. 组合数的和(15)
- 1056. 组合数的和(15)-PAT乙级真题
- PAT乙级—1056. 组合数的和(15)
- PAT 乙级 1056. 组合数的和(15)
- PAT 乙级 1056. 组合数的和(15)
- PAT乙级 1056. 组合数的和(15)
- PAT - 1056. 组合数的和(15)
- PAT1056. 组合数的和(15)
- pat 1056. 组合数的和(15)及其简单的扩展
- PAT 1056. 组合数的和(15)
- [PAT-乙级]1056.组合数的和