目录
数字颠倒
LeetCode刷多了连reverse是在algorithm中都忘记了……
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int main(){
string s;
cin>>s;
reverse(s.begin(),s.end());
cout<<s<<endl;
return 0;
}
删除字符串中出现次数最少的字符
全是体力活……记得有多个输入鸭
//
#include <iostream>
#include <string>
#include <map>
using namespace std;
int main(){
map<char,int> m;
string s;
while(cin>>s){//有多个输入!题目没说
for(int i=0;i<s.size();i++){
m[s[i]]++;
}
//获得最小值
int min = (1<<21);
for(char x='a';x<='z';x++){
if(m[x]<=min&&m[x]!=0)
min = m[x];
}
string ss;
string a;
for(char x = 'a';x<='z';x++){
if(m[x]==min)
a.push_back(x);
}
bool flag = true;
for(int i=0;i<s.size();i++){
for(int j = 0;j<a.size();j++){
if(a[j]==s[i])
flag = false;
}
if(flag)
ss.push_back(s[i]);
flag = true;
}
cout<<ss<<endl;
m.clear();//记得清除
s.clear();
}
return 0;
}
提取不重复的整数
思路最重要,不要急,慢慢想!
遇到问题先查一遍逻辑!
#include <iostream>
#include <vector>
#include <string>
#include <set>
#include <cstdlib>
using namespace std;
int main(){
int a;
cin>>a;
if(a<10)
cout<<a<<endl;
else{
string s = to_string(a);
string ss;
set<char> b;
string v;
b.insert(s[s.size()-1]);
v.push_back(s[s.size()-1]);
for(int i = s.size()-2;i>=0;i--){
if(b.find(s[i])==b.end())//没找到
v.push_back(s[i]);
b.insert(s[i]);
}
int ans = atoi(v.c_str());
cout<<ans<<endl;
}
return 0;
}
质数因子
这道题是我做到目前为止最有意思的一道题,其他的题都是体力活,这道很基础的数论真有意思!
想懂了很简单的,多体会
#include <iostream>
using namespace std;
int main(){
long s;
while(cin>>s)
while(s!=1)//终止条件!
for(int i=2;i<=s;i++)//此处能被自己整除的话,就肯定不是素数,所以不用额外判断是不是素数
if(s%i==0){
cout<<i<<" ";//能整除输出
s/=i;
break;//break只跳出一重循环
}
return 0;
}
合并表记录
#include <iostream>
#include <map>
using namespace std;
int main(){
int n;
cin>>n;
int key,value;
map<int,int> m;
for(int i=0;i<n;i++){
cin>>key>>value;
m[key]+=value;//map自动对第一个下标进行排序
}
for(map<int,int>::iterator it = m.begin();it!=m.end();it++)
cout<<it->first<<" "<<it->second<<endl;//注意访问方法
return 0;
}
求int型正整数在内存中存储时1的个数
应该是早年华为的放水题,牛客上有道差不多的题,但是有负数+大数情况,就棘手多了,负数要先转换成反码再+1转换成反码,要用位运算的技巧来A;
大数就更棘手,转换成数组?我暂时还没有简介的方法……
#include <iostream>
using namespace std;
int main(){
int n;
while(cin>>n){
int num = 0;
while(n!=0){
num+=n%2;
n/=2;
}
cout<<num<<endl;
}
return 0;
}