題目內容
題意:就是給你一個字符串,求出按鍵盤最少的次數是多少
有Caps Lock和Shift兩種轉換大小寫輸入的方式
我是用模擬的方法把所有的情況都列出,用這種方法可能的情況較多注意不要漏掉情況。
這個問題也可以用DP來解,下面這是別人的比較好的DP解法
DP解法
我的代碼:
#include<stdio.h>
#include<string.h>
int main()
{
int t;
scanf("%d",&t);getchar();
while(t--)
{
char a[105];
int i,j,len,sum=0,flag=0;
gets(a);
len=strlen(a);
for(i=0;i<len;i++)
{
if(flag==0&&(a[i]>='A'&&a[i]<='Z'&&(a[i+1]>='a'&&a[i+1]<='z'||i==len-1)))
sum+=2;
else if(flag==0&&a[i]>='a'&&a[i]<='z')
{
sum+=1;
flag=0;
}
else if(flag==0&&a[i]>='A'&&a[i]<='Z'&&a[i+1]>='A'&&a[i+1]<='Z')
{
sum+=3;
flag=1;
}
else if(flag==1&&a[i]>='A'&&a[i]<='Z')
sum+=1;
else if(flag==1&&a[i]>='a'&&a[i]<='z'&&a[i+1]>='A'&&a[i+1]<='Z')
sum+=2;
else if(flag==1&&a[i]>='a'&&a[i]<='z'&&a[i+1]>='a'&&a[i+1]<='z')
{
sum+=1;
flag=0;
}
else if(flag==1&&a[i]>='a'&&a[i]<='z'&&i==len-1)
sum+=1;
}
printf("%d\n",sum);
}
return 0;
}