题目:Divisible by Seven (CodeForces - 375A)
题面:【传送门】
思路:
今天终于揭开了数字7的神秘面纱。
能被
7
7
7 整除的数的性质:每次计算
a
/
10
−
a
%
10
∗
2
a/10-a \% 10*2
a/10−a%10∗2,如果过程中得到的数是
7
7
7 的倍数,那么这个数就是
7
7
7 的倍数。文字描述的不清晰,可以结合图理解。
知道了这个性质,解题的思路就很明确了:
题目说,一定会有 1,6,8,9
四个数字,就可以用他们来拼成
%
7
\%7
%7 得到的7种结果,让其他的数随意拼接,用着4位数来补其他数拼接对7求余后与7的差
,加到后面就行了。注意为了避免前导0的输出,可以将0放到最后输出,并不影响结果 (由7的性质可知)。
AC代码:
#include<iostream>
#include<cstring>
using namespace std;
int a[15];
int h[15];
int md[7]={1869,1968,1689,6198,1698,1986,1896};
int main(){
string s;
cin>>s;
int n=s.length();
for(int i=0;i<n;i++){
a[s[i]-'0']++;
}
a[1]--;
a[6]--;
a[8]--;
a[9]--;
int pd=0;
int hp=0;
for(int i=1;i<10;i++){
while(a[i]>0){
pd=1;
hp=hp*10%7+i%7;
cout<<i;
a[i]--;
}
}
hp=hp*10000%7;
cout<<md[(7-hp)%7];
while(a[0]>0){
cout<<"0";
a[0]--;
}
return 0;
}