目录
计算字符个数
水题,注意题目说大小写不区分,大写+32就是小写,一定记清小写的码值更大!
#include <iostream>
#include <string>
using namespace std;
int main(){
string s;
char c;
cin>>s>>c;
int n = 0;
for(int i=0;i<s.size();i++){
if(s[i]==c||(s[i]-32)==c||(s[i]+32)==c)
n++;
}
cout<<n<<endl;
return 0;
}
明明的随机数
全是基础问题都很简单,就是一定要看清楚输入和输出!看清楚怎么描述的!和PAT乙级一样,你都会做,就怕卡了!!!
充分理解题意后再动手!
#include <iostream>
#include <set>
#include <vector>
#include <cstdlib>
using namespace std;
int main(){
int k;
int n;
vector<int> v;
while(cin>>k){
for(int i=0;i<k;i++){
cin>>n;
v.push_back(n);
}
set<int> s(v.begin(),v.end());//测试样例不止一组,排序和去重的工作是一组一组的进行!
//所以不能整个定义set然后把所有样例输进去排序去重!
for(set<int>::iterator it = s.begin();it!=s.end();it++)
cout<<*it<<endl;
v.clear();
}
return 0;
}
字符串分隔
得出的教训是出了bug牛客的提示真是坑,要自己先捋一遍逻辑在搞!
又不能调试,题都很简单,滤清逻辑!
#include <iostream>
#include <string>
using namespace std;
void fun(string s){
int n = s.size()/8;
int m = s.size()%8;
for(int j = 0;j<n;j++){
for(int i=0;i<8;i++){
cout<<s[i+8*j];
}
cout<<endl;
}
for(int i=8*n;i<s.size();i++){
cout<<s[i];
}
if(m!=0){
for(int j = 0;j<8-m;j++){
cout<<'0';
}
cout<<endl;
}
}
int main(){
string s1,s2;
cin>>s1>>s2;
fun(s1);
fun(s2);
return 0;
}
进制转换
平时LeetCode代码写的太舒服了,换成牛客挺不习惯……多练啊
#include <iostream>
#include <cmath>
using namespace std;
int main(){
string s;
while(cin>>s){
int n=0;
for(int i=2;i<s.size();i++){
if(s[i]<='9'&&s[i]>='0'){
n+=(pow(16,(s.size()-i-1))*(s[i]-'0'));
}else{
int a = s[i]-'A'+10;
n+=(pow(16,(s.size()-i-1))*a);
}
}
cout<<n<<endl;
}
return 0;
}
取近似值
#include <iostream>
using namespace std;
int main(){
double a;
double b;
cin>>a;
int c=(int)a;
b = a-c;
if(b>=0.5){
cout<<c+1<<endl;
}else{
cout<<c<<endl;
}
return 0;
}
字符个数统计
搞清题意华为机试其实很简单
#include <iostream>
#include <string>
#include <set>
using namespace std;
int main(){
string s;
cin>>s;
set<char> c(s.begin(),s.end());
cout<<c.size()<<endl;
/*
int n = 0;
for(set<char>::iterator it = c.begin();it!=c.end();it++){
if(*it<=127&&*it>=0)//一开始还根据题意傻乎乎地判断
n++;
}
cout<<n<<endl;
*/
return 0;
}
字符串反转
手都做软了
#include <iostream>
#include <algorithm>
using namespace std;
int main(){
string s;
cin>>s;
reverse(s.begin(),s.end());
cout<<s<<endl;
return 0;
}
句子逆序
PAT乙级一模一样的题,栈
牛客上没有最后一个字符输出空格就报段错误,比PAT宽松多了
#include <iostream>
#include <string>
#include <stack>
using namespace std;
int main(){
stack<string> sta;
string s;
while(cin>>s){
sta.push(s);
}
string ss;
while(!sta.empty()){
ss = sta.top();
cout<<ss<<" ";
sta.pop();
}
//牛客上没有最后一个字符输出空格就报段错误,比PAT宽松多了
/*
while(sta.size()!=1){
ss = sta.top();
cout<<ss<<" ";
sta.pop();
}
ss = sta.top();
cout<<ss<<endl;
*/
return 0;
}
字符串的连接最长路径查找
题目名字倒是挺吓人的,然而一个multiset轻松解决
#include <iostream>
#include <set>
using namespace std;
int main(){
string s;
multiset<string> a;//注意不能自动去重!
int n;
cin>>n;
for(int i=0;i<n;i++){
cin>>s;
a.insert(s);
}
for(set<string>::iterator it = a.begin();it!=a.end();it++)
cout<<*it<<endl;
return 0;
}