这题全排列可以下标,因为每一行的数字都得按同一规则全排列,而他们的下标都一样,再乘以相应的权值就行了! #include <iostream> #include <cstdio> #include <algorithm> #include <cstring> using namespace std; char s[20][20]; int a[20]; char index[20]; int t[20]; int main() { int n, k; int res; int temp; int sum; int count; while(cin >> n >> k) { for(int i=0; i<n; i++) cin >> s[i]; for(int i=0; i<k; i++) index[i] = i+'0'; a[0]=1; for(int i=1; i<k; i++) a[i] = a[i-1] * 10; res=100000000; do{ count=0; for(int i=0; i<n; i++) { sum=0; for(int j=0; j<k; j++) sum = sum + (s[i][j]-'0') * a[(index[j]-'0')]; t[count++] = sum; } sort(t, t+count); if(res > t[count-1]-t[0]) res = t[count-1]-t[0]; }while(next_permutation(index, index+k)); cout << res << endl; } return 0; }