蓝桥杯——神奇算式(相乘与结果同数)
垃圾代码。。。暴力解法。。。
题目:
#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; }