uva 1610 - Party Games(细节上的处理是关键,思路比较简单)

下面的代码是按照不同情况条理来分析的,不需要多解释,细心点就可以看懂。

细节问题出了错,要稳下心来仔细读代码,去找可能存在的bug,不要轻易放弃,更不要乱改把代码搞乱。如果思路太乱,就考虑重新分析重写。

#include<cstring>
#include<iostream>
#include<string>
#include<algorithm>
//#include<cstdio>
using namespace std;

const int maxn = 1010;
string s[maxn];

void work(int a1,int a2)
{
    char ans[100];
    int len1=s[a1].size();
    int len2=s[a2].size();
    if(len1<len2)
    {
        int t=0;
        for(int i=0;i<len1;i++)
        {
            if(i==len1-1) {ans[t++]=s[a1][i];break;}//刚开始忽略
            if(s[a1][i]==s[a2][i]) ans[t++]=s[a1][i];
            if(s[a1][i]!=s[a2][i])
            {
                ans[t++]=s[a1][i]+1;
                break;
            }
        }
        for(int i=0;i<t;i++)
            cout<<ans[i];
    }
    else
    {
        int t=0;
        for(int i=0;i<len2;i++)
        {
            if(s[a1][i]==s[a2][i]) ans[t++]=s[a1][i];
            if(s[a1][i]!=s[a2][i])
            {
                if(i!=len2-1)
                {
                    ans[t++]=s[a1][i]+1;
                    break;
                }
                else
                {
                    if(i==len1-1)//刚开始忽略
                    {
                        ans[t++]=s[a1][i];
                        break;
                    }
                    char ch1=s[a1][i]+1;
                    if(s[a2][i]!=ch1)
                    {
                        ans[t++]=ch1;
                        break;
                    }
                    else
                    {
                        ans[t++]=s[a1][i];
                        for(int j=i+1;j<len1;j++)
                        {
                            if(j==len1-1)//刚开始忽略
                            {
                                ans[t++]=s[a1][j];
                                break;
                            }
                            if(s[a1][j]!='Z')
                            {
                                ans[t++]=s[a1][j]+1;
                                break;
                            }
                            else
                                ans[t++]=s[a1][j];
                        }
                        for(int k=0;k<t;k++)
                            cout<<ans[k];
                        return;
                    }
                }
            }
        }
        for(int i=0;i<t;i++)
            cout<<ans[i];
        return;
    }
}
int main()
{
    int n;
    while(cin>>n)
    {
        if(n==0) break;
        for(int i=0;i<n;i++)
        {
            cin>>s[i];
        }
        sort(s,s+n);
        int a1=(n-1)/2;
        int a2=a1+1;
        char ss[100];
        work(a1,a2);
        cout<<endl;
    }
    return 0;
}

由错误的点来看,整体上的思路还是清晰正确的,末端边界其实考虑考虑到了但是忘了判断,导致出错。

仔细读代码,越来越感觉思路清晰很重要,而不是狂改特判的能力。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值