描述:险过,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; }