哎,,,,没啥意思,,一个数位数少了能不能被8整除,,,,也就是说这题输出不会大于3位(被8整除就看后三位能不能被8整除)。。。。。
没啥吧。。。。。觉得主要是加上的每次循环要减去。。。。
于是自信满满的我写了个n^3.。。。
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <queue>
#include<bits/stdc++.h>
using namespace std;
int main() //就是判断有没有0后三位能不能被整除
{
char a[101];
scanf("%s",a);
int len=strlen(a);
int flag=0;
int sum;
for(int i=0;i<len;i++)
{
if(a[i]=='0')
{
flag=2;
break;
}
sum=a[i]-'0';
for(int j=0;j<len;j++)
{
if(j!=i)
{
sum*=10;
sum+=a[j]-'0';
for(int k=0;k<len;k++)
{
if(k!=j&&k!=i)
{
sum*=10;
sum+=a[k]-'0';
if(sum%8==0)
{
flag=1;
break;
}
sum-=a[k]-'0';
sum/=10;
}
}
if(flag==1) break;
sum-=a[j]-'0';
sum/=10;
}
if(flag==1) break;
}
if(flag==1) break;
}
if(flag==1||flag==2) puts("YES"),printf("%d\n",flag==1?sum:0);
else puts("NO");
return 0;
}
先不说超不超时,,,,,,,第8组数据(8)错了。。。。。。。好吧特判一下2位1位的,,,,,,,
还有一个问题,,只是拿掉几位!!!!因为我的2363也没过,,,,因为336是不允许被组合的(顺序不对。。。。)
然后又踩了一个坑。。。。。。。因为剩两位能整除也是可以的,,,,(所以我之前的理解到底是鬼啊)
好吧0也是可以的。。。。。。
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <queue>
#include<bits/stdc++.h>
using namespace std;
{
char a[101];
scanf("%s",a);
int len=strlen(a);
if(len==1)
{
if(a[0]=='8') {printf("YES\n"); printf("8\n");}
else if(a[0]!='0') {printf("NO\n");}
else printf("YES\n0\n");
return 0;
if(len==2)
{
if(a[0]=='0'||a[1]=='0')
{
printf("YES\n0\n");
return 0;
}
int xxx=(a[0]-'0')*10+(a[1]-'0');
int yyy=(a[1]-'0')*10+(a[0]-'0');
//printf("%d\n",xxx);
if(xxx%8==0&&a[0]!='0')
{
printf("YES\n%d\n",xxx);
}
else if(yyy%8==0&&a[1]!='0') printf("YES\n%d\n",yyy);
else printf("NO\n");
return 0;
}
int flag=0;
int sum;
if(a[len-1]==0||a[len-2]==0)
{
printf("YES\n0\n");
return 0;
}
for(int i=0;i<len;i++)
{
if(a[i]=='0')
{
flag=2;
break;
}
if(a[i]=='8')
{
printf("YES\n8\n");
return 0;
}
sum=a[i]-'0';
for(int j=i+1;j<len;j++)
{
sum*=10;
sum+=a[j]-'0';
if(sum%8==0)
{
flag=1;
break;
}
for(int k=j+1;k<len;k++)
{
sum*=10;
sum+=a[k]-'0';
if(sum%8==0)
{
flag=1;
break;
}
sum-=a[k]-'0';
sum/=10;
}
if(flag==1) break;
sum-=a[j]-'0';
sum/=10;
if(flag==1) break;
}
if(flag==1) break;
}
if(flag==1||flag==2) puts("YES"),printf("%d\n",flag==1?sum:0);
else puts("NO");
return 0;
}
很有意义,,,,下次加油吧。。。!!!!