您的位置:首页 > 其它

POJ3602解题报告

2015-09-14 18:01 267 查看

题意

输入一串字符串,求问有多少种字符,重复出现的不算,限定条件为:

ff,fi,fl,ffi,ffl,”,“这7种每种各算一种字符。

解题思路

先把字符串存起来,这里是难点,要注意题目中说的是空格和换行不存,这里就需要一个个的敲进去字符,然后存进字符串里面
然后对每个字符进行判断,是7种之一就把7种的矩阵置为1
是普通的就把普通的矩阵置为1,最后判断为真的数组有多少个,就是结果


代码

#include<cstdio>  
#include<cstring>  
#include<iostream>  
using namespace std;  

char s[1000];  
int count1[1000];  
int ff[7];  
int len;  

void solve()  
{  
    int ans = 0;  
    memset(count1,0,sizeof(count1));  
    memset(ff,0,sizeof(ff));  
    for(int i = 0;i<len;i++)  
    {  
        if(s[i] == 'f')  
        {  
            if(s[i+1] == 'f' && (s[i+2] == 'i' || s[i+2]=='l'))  
            {  
                if(s[i+2] == 'i'){      
                    ff[0]=1;
                }
                if(s[i+2] == 'l') { 
                    ff[1]=1;  

                }
                i+=2;  
            }  
            else if(s[i+1]=='f'||s[i+1]=='i'||s[i+1]=='l')  
            {  
                if(s[i+1]=='f')  
                    ff[2]=1;  
                if(s[i+1]=='i')  
                    ff[3]=1;  
                if(s[i+1]=='l')  
                    ff[4]=1;  
                i++;  
            }  
            else  
                count1[s[i]]=1;  
        }  
        else if(s[i]=='`'&&s[i+1]=='`')  
        {  
            ff[5]=1;  
            i++;  
        }  
        else if(s[i]=='\''&&s[i+1]=='\'')  
        {  
            ff[6]=1;  
            i++;  
        }  
        else  
            count1[s[i]]=1;  
    }  
    for(int i = 0;i<=256;i++)  
        if(count1[i]) ans++;  
    for(int i = 0;i<7;i++)  
        if(ff[i]) ans++;  
    cout<<ans<<endl;  
}  

int main()  
{  
    char c;  
    len = 0;  
    while(cin>>c)  
    {  
        if(c == EOF) break;  //注意

        if(c == ' '||c == '\n') continue;  
        s[len++] = c;  
    }  
    solve();  
    return 0;  
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: