【C/C++】速通某站上的经典“笔试”编程题
一. 题目描述:解题思路:代码实现: 二. 题目描述:解题思路:代码实现: 三. 题目描述:解题思路:代码实现:
一. 题目描述:
解题思路:
将区间里面的数依次取模10(%)、除10,作用是大于等于10的数单独拆开(如123,依次拆开为3,2,1),判断是否等于2,如果是就count++;最后count数值为所求。
关键:
1. 一个数取模10后的数值等于其个位数上的数值(如:123 % 10 = 3)
2. 一个数除10后的数值等于其去掉个位上的数的数值(如:123 / 10 = 12)
代码实现:
#include <iostream>using namespace std;int main() { 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为空时直接插入;
代码实现:
class Solution {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>using namespace std;int main() { 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++必看网站