思路如下: 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;
}