字符串与文件操作
文章目录
H P1321 单词覆盖还原
题目:P1765 手机 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)](https://www.luogu.com.cn/problem/P1765?contestId=85495)
解析:
1.分析题目
如此图,可得A按1下,A按1下,B按2下,C按1下,D按3下,E按1下,F按2下…………
如此循环,要注意P-Z,因为7,9键各控制四个键。
得表:
按数:1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,4,1,2,3,1,2,3,4
字母: a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z
2.代码:
#include<bits/stdc++.h>
using namespace std;
string f;//输入变量
int ans=0;//答案变量
int g[27]={1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,4,1,2,3,1,2,3,4};//表
int main ( )
{
getline(cin,f);//录入整行
for (int i=0;i<f.size();i++//逐个分析
{
if (f[i]>='a'&&f[i]<='z')//排除空格
{
ans+=g[f[i]-'a'];//取表
}
if (f[i]==' ')//题目强制要求,若有换行,则getline无法全部录入,所以理论上可以直接else,但是如果使用,全WA,但样例下载测结果却AC无误。
ans++;
}
cout<<ans;//输出
}
3.反思:
这一次我因为大意,没有考虑完全,虽然“只包含英文小写字母和空格只包含英文小写字母和空格”
,但还是应该f[i]==’ '特判,避免输入/n,/r。
I P3741 honoka的键盘
P3741 honoka的键盘 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
解析:
1.分析题目
思路:直接求VK个数,特判改变。
2.代码
#include<bits/stdc++.h>
using namespace std;
string f;//输入变量
int i,ans;//i凑满足题目,其实不需要。ans是答案。
bool p=0;//p=0时未改变原f。
int main ( )
{
cin>>i>>f;//直接输入
for (int i=1;i<f.size();i++)//枚举分f[i]。
{
if (f[i-1]=='V'&&f[i]=='K')//是直接VK
{
ans++;//答案加一
}
else if (f[i-1]=='V'&&f[i]=='V'&&p==0&&f[i+1]!='K')//特判,是否改变f[i],V->K,需要判断是否改变原个数,+1-1=0,改变无意义,不改变。VVV->vvk,vvk—>vkk未改变,无意义。
{
p=1;//以变
ans++;//答案加一
}
else if (f[i-1]=='K'&&f[i]=='K'&&p==0&&(f[i-2]=='K'||i<2))
{
p=1;//以变
ans++;//答案加一
}
}
cout<<ans;//输出
}
3.反思:
注意特判,思考全面,不用想到一个方面就写一个方面,切记不要让WA来在想。