字符串替换
题目链接:
https://www.nowcoder.com/questionTerminal/f409e49e3f3e4b68819ffceb50df7df5?answerType=1&f=discussion
题目描述
给定一个仅由小写字母x和y组成且长度不超过105的字符串,每次可以将字符串中的一个子串xy替换成字符串yyx,那么至少要替换多少次才能让字符串中不存在子串xy?
输入描述:
输入给定的字符串。
输出描述:
输出最少替换次数对109+7取模后的结果。
输入
xxy
输出
3
思路:看完题目之后不知道从哪里开始,看了一位大佬的题解,思路就清晰了。大概就是把x往后移,每次移动只有y的数量改变了,变成了原来的两倍。
暴力模拟法,我也不懂这是什么,emmmmm
ac代码:
#include<bits/stdc++.h>
using namespace std;
int main()
{
string s;
cin>>s;
long long y_num=0,num=0;
for(int i=s.length()-1;i>=0;i--)
{
if(s[i]=='y')
{
y_num++;
}
else
{
num=num%(1000000007)+y_num;
y_num=y_num*2;
y_num=y_num%(1000000007);
}
}
cout<<num%(1000000007)<<endl;
return 0;
}
时间转换
题目链接:
https://www.nowcoder.com/questionTerminal/1ff47ce832054d2d84fc66a70e9e1009
题目描述
给定一个12小时制的时间,请将其转换成24小时制的时间。说明:12小时制的午夜12:00:00AM,对应的24小时制时间为00:00:00。12小时制的中午12:00:00PM,对应的24小时制时间为12:00:00。
输入描述:
一个描述12小时制时间的字符串。所有的输入都是合理的,不用考虑输入不合理的情况。
输出描述:
一个描述24小时制时间的字符串。
输入
08:03:45PM
输出
20:03:45
ac代码:
#include<bits/stdc++.h>
using namespace std;
int main()
{
string st;
int h,m,s;
cin>>st;
if(st[st.length()-2]=='A')
{
h=(st[0]-'0')*10+st[1]-'0';
if(h==12)
h=0;
}else
{
h=(st[0]-'0')*10+st[1]-'0'+12;
if(h==24)
h=12;
}
m=(st[3]-'0')*10+st[4]-'0';
s=(st[6]-'0')*10+st[7]-'0';
printf("%02d:%02d:%02d", h, m, s);
return 0;
}
求表达式末尾的0
题目链接
https://www.nowcoder.com/questionTerminal/b6b63d3c0ff140a481b4f9acda922503
题目描述
输入一个自然数n,求表达式 f(n) = 1!\times×2!\times×3!\times×…\times×n! 的结果末尾有几个连续的0?
输入描述:
自然数n
输出描述:
f(n)末尾连续的0的个数
输入
11
输出
9
思路:我是看了这位博主的解题思路(原文链接),博主写的很详细,很nice呀~
ac代码:
#include<bits/stdc++.h>
using namespace std;
int main()
{
int t;
cin>>t;
int a=0,b=0,c=0,num=0,k=5;
for(int i=5;i<=t;i++)
{
if(i>=k)
{
k=k*5;
}
for(int j=5;j<k;j=j*5)
num+=i/j;
//cout<<num<<endl;
}
cout<<num<<endl;
return 0;
}