//#include <bits/stdc++.h>#include<iostream>#include<string>#include<unordered_map>#include<cstring>usingnamespace std;
unordered_map<string,char> m ={{"1",'1'},{"abc",'2'},{"def",'3'},{"ghi",'4'},{"jkl",'5'},{"mno",'6'},{"pqrs",'7'},{"tuv",'8'},{"wxyz",'9'},{"0",'0'},};intmain(){
string str ="";
cin>>str;
string res ="";for(char c : str){char ch;if(!isdigit(c)){//如果不是数字if(c >='a'&& c <='z'){for(auto iter = m.begin(); iter != m.end(); iter++){//cout<<iter->first.c_str()<<endl;//cout<<iter->second<<endl;if(iter->first.find(c)!= iter->first.npos){//找到了
ch = iter->second;//cout<<ch<<endl;
res += ch;break;}}}elseif(c >='A'&& c <='Z'){if(c =='Z'){//特殊情况
ch ='a';}else{
ch = c +33;//先变成小写,再往后移一位}
res += ch;}}else{
res += c;}}
cout<<res<<endl;return0;}
22.汽水瓶
#include<iostream>#include<vector>usingnamespace std;voidprocess(int num,int& ans){if(num <2) ans =0;while(num >=2){
ans +=1;
num -=3;
num +=1;}}intmain(){int num =0;
vector<int> res;while(cin>>num && num !=0){int ans =0;process(num, ans);
res.push_back(ans);}for(int i =0; i < res.size(); i++){
cout<<res[i]<<endl;}return0;}
23.删除字符串中出现次数最少的字符
#include<iostream>#include<string>#include<unordered_map>#include<vector>#include<algorithm>usingnamespace std;intmain(){
string str ="";
cin >> str;
unordered_map<char,int> m;for(char c : str){
m[c]++;}
vector<int> tmp;for(auto iter = m.begin(); iter != m.end(); iter++){
tmp.push_back(iter->second);}sort(tmp.begin(), tmp.end());
string res ="";for(char c : str){if(m[c]!= tmp[0]){
res += c;}}
cout << res << endl;return0;}
24.合唱队
#include<bits/stdc++.h>usingnamespace std;voidprocess(vector<int> vec,int N,int& res){
vector<int>leftNum(N,0);
vector<int>rightNum(N,0);//左边的最长序列长度for(int i =0; i < N; i++){for(int j =0; j < i; j++){if(vec[j]< vec[i]){
leftNum[i]=max(leftNum[i], leftNum[j]);}}
leftNum[i]= leftNum[i]+1;//cout << leftNum[i]<<endl;}//右边的最长序列长度for(int i = N -1; i >=0; i--){for(int j = N -1; j > i; j--){if(vec[i]> vec[j]){
rightNum[i]=max(rightNum[i], rightNum[j]);}}
rightNum[i]= rightNum[i]+1;}//求最长的序列长度int maxValue = INT_MIN;for(int i =0; i < N; i++){
maxValue =max(maxValue, leftNum[i]+ rightNum[i]-1);//}
res = N - maxValue;return;}intmain(){int N =0;
cin >> N;
vector<int> vec;int h =0;for(int i =0; i < N; i++){
cin >> h;
vec.push_back(h);}int res =0;process(vec, N, res);
cout << res << endl;return0;}
25.数据分类处理
#include<bits/stdc++.h>usingnamespace std;boolisExist(string strI, string s){returnstrstr(strI.c_str(), s.c_str())!=nullptr;//在strI中找s第一次出现的位置}voidprocess(int sizeI,int sizeR, vector<int> I, vector<int> R){sort(R.begin(), R.end());//排序//unique函数:”删除”序列中所有相邻的重复元素(只保留一个)。此处的删除,并不是真的删除,而是指重复元素的位置被不重复的元素给占领了//单纯的使用unique函数的话,容器的长度并没有发生变化,只是元素的位置发生了变化//返回值是一个迭代器,它指向的是去重后容器中不重复序列的最后一个元素的下一个元素。//如1334667——>1346767,指向第2个6的位置;//所以要搭配erase使用
vector<int>::iterator new_end =unique(R.begin(), R.end());//去重
R.erase(new_end, R.end());
unordered_map<string, vector<pair<string,int>>> mp;for(int i =0; i < R.size(); i++){//cout << R[i] << " " << endl; //排序去重后的R
string tmp_rs =to_string(R[i]);//cout << tmp_rs << endl;for(int j =0; j < I.size(); j++){
string tmp_is =to_string(I[j]);if(isExist(tmp_is, tmp_rs)){//cout << j << " ";
mp[tmp_rs].push_back(make_pair(tmp_is, j));}}}
vector<string> res;for(int i =0; i < R.size(); i++){for(auto item = mp.begin(); item != mp.end(); item++){if(item->first ==to_string(R[i])){
res.push_back(item->first);int baohanNum = item->second.size();
res.push_back(to_string(baohanNum));for(int idx =0; idx < baohanNum; idx++){
res.push_back(to_string(item->second[idx].second));
res.push_back(item->second[idx].first);}}}}
cout << res.size()<<" ";for(auto x : res){
cout << x <<" ";}
cout << endl;}intmain(){int m =0, n =0;
cin >> m;
vector<int>I(m,0);for(int i =0; i < m; i++){int num =0;
cin >> num;
I[i]= num;}
cin >> n;
vector<int>R(n);for(int i =0; i < n; i++){int num =0;
cin >> num;
R[i]= num;}process(m, n, I, R);return0;}
26.字符串排序
#include<bits/stdc++.h>usingnamespace std;intmain(){
string str ="";getline(cin, str);char out[1000];int k =0;for(int i =0; i <=26; i++){//for(int j =0; j < str.size(); j++){if(str[j]-'a'== i || str[j]-'A'== i){//
out[k++]= str[j];//out中存放的便是按照顺序的字符串}}}//for(int i = 0; i < strlen(out); i++)//cout<<out[i];
k =0;for(int i =0; i < str.size(); i++){if(isalpha(str[i])){
str[i]= out[k++];//}}
cout<<str<<endl;return0;}
27.查找兄弟单词
#include<bits/stdc++.h>usingnamespace std;voidprocess(int wordsNum,int& ans, string& res){
vector<string>vecStr(wordsNum,"");for(int i =0; i < wordsNum; i++){
string s ="";
cin >> s;
vecStr[i]= s;}
string word ="";
cin >> word;int k =0;
cin >> k;
unordered_map<string, vector<string>> m;
string w = word;sort(w.begin(), w.end());for(int i =0; i < vecStr.size(); i++){
string tmp = vecStr[i];sort(tmp.begin(), tmp.end());if(tmp == w && vecStr[i]!= word){
m[word].push_back(vecStr[i]);//cout << vecStr[i]<<endl;}}sort(m[word].begin(), m[word].end());
ans = m[word].size();if(k < ans){//
res = m[word][k -1];}return;}intmain(){int wordsNum =0;int ans =0;
string res ="";while(cin >> wordsNum){process(wordsNum, ans, res);
cout << ans << endl;if(res !=""){//
cout << res << endl;}}return0;}
28.素数伴侣
#include<bits/stdc++.h>usingnamespace std;//判断一个数是否是素数boolisPrime(int num){for(int i =2; i * i <= num; i++){if(num % i ==0){returnfalse;}}returntrue;}boolfind(int num, vector<int> evens, vector<bool>& used, vector<int>& match){for(int i =0; i < evens.size(); i++){//遍历每个偶数与奇数比较if(isPrime(num + evens[i])&&!used[i]){
used[i]=true;//如果第i个偶数还未配对,或者跟它配对的奇数还有别的选择if(match[i]==0||find(match[i], evens, used, match)){
match[i]= num;//则配对该数returntrue;}}}returnfalse;}intmain(){int n =0;
cin >> n;
vector<int>nums(n);
vector<int> odds;//奇数数组
vector<int> evens;//偶数数组for(int i =0; i < n; i++){
cin >> nums[i];if(nums[i]%2!=0) odds.push_back(nums[i]);//奇数数组else evens.push_back(nums[i]);//偶数数组}int count =0;//(只能是一个奇数一个偶数才可以构成素数伴侣)if(odds.size()==0|| evens.size()==0){
cout << count << endl;//缺少奇数或者偶数无法构成素数伴侣}else{
vector<int>match(evens.size(),0);//统计每个偶数的配对是哪个奇数for(int i =0; i < odds.size(); i++){//遍历每个奇数
vector<bool>used(evens.size(),false);//对于当前的奇数 每一个偶数都没用过if(find(odds[i], evens, used, match)){//能否找到配对的偶数
count++;}}
cout << count << endl;}return0;}