枚举就完事了
int arr[15]; int check(int i,int j) { memset(arr,0,sizeof(arr)); int temp1,temp2; while(i) { temp1 = i%10; i/=10; arr[temp1]++; } while(j) { temp2 = j%10; j/=10; arr[temp2]++; } for(int i=0;i<10;i++) { if(arr[i]>=2)return 0; } return 1; } int arr1[10005]; int ans=0; int main() { for(int i=1;i<1000;i++) { for(int j=1;j<1000;j++) { int flag = 1; memset(arr,0,sizeof(arr)); if(check(i,j) && i*j<10000) { int temp = i*j; int mark =temp; int temp2; while(temp) { temp2 = temp%10; temp/=10; arr[temp2]++; } for(int i=0;i<10;i++) { if(arr[i]==1 || arr[i]>2) { flag = 0; break; } } if(flag==0) continue; else { if(arr1[mark]==0 ) ans++; cout<<i<<" "<<j<<" "<<mark<<endl; arr1[mark] = 1; } } } } cout<<ans; }