垃圾代码。。。暴力解法。。。
题目:
#include <iostream>
#include<cmath>
#include<string.h>
#include<sstream>
#include<algorithm>
using namespace std;
bool same(string s1, string s2) {//判断两个字符串内的字符是否完全相同
if (s1.length() != s2.length()) return false;
int len = s1.length();
char *c1 = new char[len+1];//为了使数组范围是变量,用new动态申请
char *c2 = new char[len+1];
strcpy(c1, s1.c_str());//
strcpy(c2, s2.c_str());
sort(c1, c1 + len);//用sort的时候要传入字符数组类型的首地址和尾地址,
sort(c2, c2 + len);
int i, j;
for (i = 0, j = 0; i<len&&j<len; i++, j++) {
if (c1[i] != c2[j])return false;
}
free(c1);
free(c2);
return true;
}
void i2s(int n,string &s){//数字转字符串
stringstream ss;
ss<<n;
ss>>s;
}
int main(int argc, char *argv[]) {
int cnt=0;
for(int i=1;i<=9;i++){
for(int j=0;j<10;j++){
if(i!=j)
for(int k=0;k<10;k++){
if(k!=i&&k!=j)
for(int l=0;l<10;l++)
if(l!=k&&l!=i&&l!=j){//4位数 乘号可能插在三个地方
string s1,s2,s3,so;
i2s(i*(j*100+k*10+l),s1);
i2s((i*10+j)*(k*10+l),s2);
i2s((i*100+j*10+k)*l,s3);
i2s(i*1000+j*100+k*10+l,so);
if(same(s1,so))cnt++;
if(same(s2,so))cnt++;
if(same(s3,so))cnt++;
}
}
}
}
cout<<cnt/2;//交换律
return 0;
}