简单难度之一
题记:若立志投身算法研究,可精研理论算法:动态规划、递归、深度搜索等;若以解决问题为目的,主要为了工作内容,当尝试快而简单的方法,这该是学习的本意。
1.字符串最后一个单词的长度
#include<bits/stdc++.h>
using namespace std;
int main() {
string s;
while(cin >> s);
cout << s.size();
return 0;
}
2.计算某字符出现次数
#include<iostream>
#include<string>
using namespace std;
int main()
{
string s;
getline(cin, s);
char ch;
cin>>ch;
int cnt=0;
for(int i = 0; i<s.length();i++)
{
if(s[i]>='A' && s[i] <= 'Z')
{
if(s[i] == ch || s[i] == ch-32)
{
cnt++;
}
}
else if(s[i]>='a' && s[i] <= 'z')
{
if(s[i] == ch || s[i]== ch+32)
{
cnt++;
}
}
else if (s[i] == ch)
{
cnt++;
}
}
cout<<cnt;
}
3.字符串分隔
#include<iostream>
#include<string>
using namespace std;
int main()
{
string str1;
while(getline(cin,str1))
{
while(str1.size() > 8)
{
cout <<str1.substr(0,8)<<endl;//从0位置开始,截取8个数字。
str1 = str1.substr(8,str1.size() - 8); //将剩余的数组重新放入到字符串中
}
int len = str1.size();//获取到剩下字符串个数
if(len == 8){//如果剩下8个,直接输出。
cout << str1 <<endl;
}else{
for(int i=len;i<8;i++)//如果少于8个,在字符串后面直接加0;
{
str1+='0';
}
cout<<str1<<endl;
}
}
return 0;
}
4.进制转换
#include<iostream>
using namespace std;
int main(){
string a;
while(getline(cin,a)){
int res=0;
int pos=a.find('x');
for(int i=pos+1;i<a.size();++i){
int tmp=0;
if(a[i]>='A'&&a[i]<='F'){
tmp=10+(a[i]-'A');
}
else{
tmp=a[i]-'0';
}
res=res*16+tmp;
}
cout<<res<<endl;
}
return 0;
}
5.质数因子
#include<iostream>
#include<cmath>
using namespace std;
int main(){
long n;
cin >> n;
for(long i = 2; i <= sqrt(n) && i <= n; i++){ //从小到大的质因子,质因子不会超过它的开方
while(n % i == 0){ //所有的质数前面全部除掉,后续就不会有合因子
cout << i << " ";
n /= i; //除掉质因子
}
}
if(n - 1) //自己本身就是质数
cout << n << " ";
return 0;
}
6.合并表记录
#include<iostream>
#include<map>
using namespace std;
int main()
{
int n=0;
cin>>n;
int key,value;
map<int, int, less<int>>pairs;
for(int i=0; i<n; ++i)
{
cin>>key>>value;
if(pairs.count(key)==0)
pairs.insert(make_pair(key, value));
else
pairs[key] += value;
}
for(auto it = pairs.begin(); it != pairs.end(); it++)
{
cout<<it->first<<' '<<it->second<<endl;
}
return 0;
}
7.字符个数统计
#include<iostream>
#include<set>
using namespace std;
int main() {
string text; //存放输入的字符串
getline(cin, text); //获取输入的一行字符串
set<char> s; //使用set容器
for(int i=0;i<text.length();i++) {
s.insert(text[i]); //将text中的字符逐个添加到set容器中
}
cout<<s.size()<<endl; //输出set容器的长度,即为不同字符的个数
}
8.数字颠倒
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
int n;
cin>>n;
string s = to_string(n);//将数字转换成字符串;
reverse(s.begin(),s.end());//倒序输出
cout<<s<<endl;
return 0;
}
9.字符串反转
#include <stdio.h>
#include <string.h>
int main(void)
{
char str1[1000]; char str2[1000];
gets(str1);
int num = strlen(str1);
for(int i = 0; i < num; i++)
str2[i] = str1[num - 1 - i];
str2[num] = 0;
printf("%s",str2);
return 0;
}
10.句子逆序
#include<iostream>
#incude<string>
int main()
{
string s;
stack<string> temp;
while(cin>>s)
temp.push(s);
while(!temp.empty())
{
cout<<temp.top()<<" ";
temp.pop();
}
return 0;
}