【C/C++】速通某站上的经典“笔试”编程题
一. 题目描述:

解题思路:
将区间里面的数依次取模10(%)、除10,作用是大于等于10的数单独拆开(如123,依次拆开为3,2,1),判断是否等于2,如果是就count++;最后count数值为所求。
关键:
1. 一个数取模10后的数值等于其个位数上的数值(如:123 % 10 = 3)
2. 一个数除10后的数值等于其去掉个位上的数的数值(如:123 / 10 = 12)
代码实现:
#include<iostream>usingnamespace std;intmain(){int a, b;//输入区间int m;//中间转换变量int count =0;//计数scanf("%d %d",&a,&b);for(int i = a; i <= b; i++){int tmp = i;while(tmp >=2){ m = tmp %10;if(m ==2){ count++;} tmp /=10;}} cout << count;}
二. 题目描述:

解题思路:
先将这两个数组排序(关键1);创建一个vector变量tmp,直接双重循环依次比较所有元素;然后分两情况(1. tmp为空 ; 2. tmp不为空)插入到tmp中,不为空时要控制tmp中已有元素不再插入到tmp中(关键2);tmp为空时直接插入;
代码实现:
classSolution{public:/** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param nums1 int整型vector * @param nums2 int整型vector * @return int整型vector */ vector<int>intersection(vector<int>& nums1, vector<int>& nums2){ vector<int> tmp;sort(nums1.begin(), nums1.end());//将nums1排序sort(nums2.begin(), nums2.end());//将nums2排序for(int i =0; i < nums1.size(); i++){for(int j =0; j < nums2.size(); j++){if(tmp.empty()&& nums1[i]== nums2[j]) tmp.push_back(nums1[i]);if(!tmp.empty()&& nums1[i]== nums2[j]&& nums1[i]!= tmp[tmp.size()-1]) tmp.push_back(nums1[i]);}}return tmp;}};
三. 题目描述:

解题思路:
创建一个string变量,充分利用迭代器(指针);依次判断相邻两个数是否相等,等则删除这两个数(注意迭代器的运用是关键);上面的示例二和示例三是两种特殊情况,控制这里的迭代器越界问题是关键;
代码实现:
#include<iostream>#include<string>usingnamespace std;intmain(){ string tmp; cin >> tmp;auto it = tmp.begin();while(it != tmp.end()-1){if(*it !=*(it +1)) it++;if(*it ==*(it +1)){ it = tmp.erase(it); it = tmp.erase(it); it -=1;}}if(tmp.empty()) cout <<'0';else cout << tmp;}
学习C++必看网站