求指正思路
查看原帖
求指正思路
1104446
Absurdaaaaaa楼主2023/12/26 20:52

思路如下: 1.考虑个位上面有0、4、8,则直接删前面所以数; 2.考虑最高位上面有4、8,则删去后面所以数; 3.从后往前遍历,找一个a[i]是0、4、8,并且a[i-1]是偶数,或者找一个a[i]是2、6,并且前一位是奇数;则删去i后面所有数, 不知道思路哪里有问题,全wa,求指正,感觉是没读对题意 代码如下:

#include<iostream>
#include<cstring>
using namespace std;
int t;
int main()
{
    cin>>t;
    for(int T=0 ;T<t;T++)
    {
        char a[19];
        int j=0;
        cin>>a;
        if(a[0]%4==0){cout<<"YES"<<endl;goto b;}
        else if((a[strlen(a)-1]-'0')%4==0){cout<<"YES"<<endl;goto b;}
        if(a[strlen(a)-1]=='0'||a[strlen(a)-1]=='4'||a[strlen(a)-1]=='8')
        {j=2;}
        else if(a[strlen(a)-1]=='2'||a[strlen(a)-1]=='6')
        {j=1;}
        for(int i=strlen(a)-2;i>=0;i--)
        {
            if(j==1&&(a[i]-'0')%2==1){cout<<"YES"<<endl;goto b;}
            if(j==2&&(a[i]-'0')%2==0){cout<<"YES"<<endl;goto b;}
        }
        for(int i=strlen(a)-1;i>0;i--)
        {
            if((a[i]=='4'||a[i]=='8')&&(a[i-1]-'0')%2==0){cout<<"YES"<<endl;goto b;}
            else if((a[i]=='2'||a[i]=='6')&&(a[i-1]-'0')%2==1)
            {cout<<"YES"<<endl;goto b;}
            else if(a[i]=='0'&&(a[i-1]-'0')%2==0)
            {cout<<"YES"<<endl;goto b;}
        }
        cout<<"NO"<<endl;
        b:
        continue;
    }
    return 0;
}
2023/12/26 20:52
加载中...