10.肥宅快乐串

思路:以10为单位遍历,与标准比对,记录不同字符数,分情况讨论:

flag=0:在单词内任选两个相同字符进行交换即可。

flag=1:与所有其他字符尝试进行交换。

flag=2:交换不同的两个字符,令交换后与标准相同

flag> 3:不存在答案

#include<stdio.h>  
#include<string.h>  
int main()  
{  
    int T,i,l,j,o,flag,TF,w1,w2,L;  
    char S[10]="fattyhappy",s[1101],S1,S2;  
    scanf("%d",&T);  
    getchar();  
    for(i=0;i<T;i++)  
    {  
        memset(s,'\0',sizeof(s));  
        scanf("%s",s);  
        l=strlen(s);  
        for(j=0;j<l;j++)  
        {  
            flag=0;  
            TF=0;  
            for(o=0;o<10;o++)  
            {  
                if(s[j+o]!=S[o]&&flag==0)  
                {  
                    S1=S[o];  
                    w1=j+o;  
                    flag++;  
                }  
                else if(s[j+o]!=S[o]&&flag==1)  
                {  
                    S2=S[o];  
                    w2=j+o;  
                    flag++;  
                }  
                else if(s[j+o]!=S[o]&&flag>1)  flag++;  
            }  
            if(flag==0)  
            {  
                printf("%d %d\n",j+4,j+3);  
                TF=1;  
                break;  
            }  
            else if(flag==2)  
            {  
                if(s[w1]==S2&&s[w2]==S1)  
                {  
                    printf("%d %d\n",w1+1,w2+1);  
                    TF=1;  
                    break;  
                }  
            }  
            else if(flag==1)  
            {  
                for(L=0;L<l;L++)  
                {  
                    if(L==j)   
                    {  
                        L=L+9;  
                        continue;  
                    }  
                    if(s[L]==S1)  
                    {  
                        printf("%d %d\n",L+1,w1+1);  
                        TF=1;  
                        break;  
                    }  
                }  
                if(TF==1)  break;  
            }  
            else  continue;  
        }  
        if(TF==0)  printf("-1\n");  
    }  
} 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值