一个六位数,每一位上数字都是非零自然数,任何 3 个连续排列的数字都构成能被4 和 7 整除的三位数,那么这个六位数是?
01 #include<bits/stdc++.h>
02 using namespace std;
03 const int MOD=4*7;
04 int f[10],g[10];
05 int main(){
06 int left,right,mid,sum,n=0;
07 for(int i=1;i<10;i++){
08 left=1,right=9;
09 // 二分法找到一个 mid,使其满足题目要求
10 while(left<=right){
11 mid=(left+right)>>1;
12 sum=(20i)%MOD-mid; //这里看不懂,请大神帮忙*****
13 if(!sum){
14 f[n]=i;
15 g[n++]=mid;
16 break;
17 }
18 else if(sum<0)
19 right=mid-1;//如果和太小,就减小右边界
20 else
21 left=mid+1;//如果和太大,就增加左边界
22 }
23 }
24 for(int i=0;i<n;i++)
25 for(int j=0;j<n;j++)
26 for(int k=0;k<n;k++)
27 if(!((3f[i]+f[j]-2f[k])%MOD)) //这里也看不懂**********。
28 cout<<f[i]<<f[j]<<f[k]<<g[i]<<g[j]<<g[k]<<endl;
29 return 0;
30 }