HDU 2577 How to Type

来源:互联网 发布:呼叫中心的网络构架 编辑:程序博客网 时间:2024/05/29 11:36

题目内容
题意:就是给你一个字符串,求出按键盘最少的次数是多少
有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;}