[cpp] 描述:險過,2.856s,題意就是前幾位能被幾整除,n表示是從第n位開始,m表示是到m位結束,如果在這期間存在一個數可以整除從n到m區間的任何一個數,那就輸出,如果存在多個,選取最小的一個輸出,如果不存在,輸出-1 #include <cstdio> #include <cstdlib> #include <cstring> int n,m,flag,sum; char str[35]; int cal(int cur) { int c=0; for(int i=0; i<cur; i++) c=(c*10+str[i]-'0')%cur; return c; } void dfs(int cur) { if(flag) return; if(cur==m) { flag=1; printf("%s\n",str); return; } for(int i=0; i<10; ++i) { str[cur]='0'+i; if(cur<n-1||!cal(cur+1))dfs(cur+1); if(flag) return; } } int main() { //freopen("a.txt","r",stdin); int t,c=1; scanf("%d",&t); while(c<=t) { scanf("%d %d",&n,&m); printf("Case %d: ",c++); flag=sum=0; if(n<m) for(int i=1; i<10; ++i) { str[0]=i+'0'; dfs(1); if(flag) break; } if(!flag) printf("-1\n"); } return 0; }