绛县网站建设,小程序开发课程,抖音seo查询工具,汉川网站推广服务题目描述 tokitsukaze又在玩3ds上的小游戏了#xff0c;现在她遇到了难关。 tokitsukaze得到了一个整数x#xff0c;并被要求使用x的每一位上的数字重新排列#xff0c;组成一个能被8整除的数#xff0c;并且这个数尽可能大。 聪明的你们请帮帮可爱的tokitsukaze#xff0… 题目描述 tokitsukaze又在玩3ds上的小游戏了现在她遇到了难关。 tokitsukaze得到了一个整数x并被要求使用x的每一位上的数字重新排列组成一个能被8整除的数并且这个数尽可能大。 聪明的你们请帮帮可爱的tokitsukaze如果无法组成被8整除的数请输出-1。 保证输入不含前导0输出也不能含前导0。 输入描述: 第一行包括一个正整数T(T1000)表示T组数据。
接下来T行每一行包括一个整数x(0≤x≤10^100)。 输出描述: 请输出用这些数字组成出能被8整除的最大的数如果无法组成出能被8整除的数请输出-1。 示例1 输入 2
666
1256输出 -1
6512 一个数能否被8整除,若大于999,呢么后三位能整除8,呢么这个数字就能整除8 快速判断一个数能否被1、2、3、4、5、6、7、8、9、10、11、12、13、17、19、23等整除的规律总结: https://blog.csdn.net/weixin_41183791/article/details/84887846 ac: #includebits/stdc.h
using namespace std;
int c[10]{0};
char str[1010]{0};struct node
{int num;int max2;int xc[10]{0};friend bool operator (node a,node b){if(a.max2b.max2)return a.numb.num;else return a.max2b.max2;}
}a[1000];int b[3]{0};int init()
{int n,m,x,j1;a[0].num0; //别忘了000哦a[0].xc[0]3;a[0].max20;for(int i100;i1000;i){if(i%80){a[j].numi;b[0]i%10;b[1](i%100)/10;b[2]i/100;a[j].xc[b[0]];a[j].xc[b[1]];a[j].xc[b[2]];sort(b,b3,greaterint());a[j].max2b[0]*100b[1]*10b[2];j;}}sort(a,aj);return j;
}int gg[]{8,16,24,32,40,48,56,64,72,80,88,96};int main()
{int t;int jinit();scanf(%d,t);while(t--){memset(str,0,sizeof(str));memset(c,0,sizeof(c));scanf(%s,str);int lenstrlen(str);if(len1){if(str[0]-08)printf(8\n);else if(str[0]-00)printf(0\n);else printf(-1\n);}else if(len2){int flag0;int xx(str[0]-0)*10str[1]-0;int yystr[0]-0(str[1]-0)*10;for(int i11;i0;i--){if(xxgg[i]||yygg[i]){flag1;printf(%d\n,gg[i]);break;}}if(flag0)printf(-1\n);}else{for(int i0;ilen;i)c[str[i]-0];int sign0;for(int i0;ij;i){int flag0;for(int k0;k10;k){if(c[k]a[i].xc[k]){flag1;break;}}if(flag0){for(int k0;k10;k)c[k]-a[i].xc[k];for(int k10;k0;){if(c[k]0){printf(%d,k);c[k]--;}else k--;}if(i0)printf(000\n);else printf(%d\n,a[i].num);sign1;break;}}if(sign0)printf(-1\n);}}return 0;
} 转载于:https://www.cnblogs.com/wangtao971115/p/10358242.html