蓝桥杯——神奇算式(相乘与结果同数)

垃圾代码。。。暴力解法。。。

题目:

#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;
	
}

  

 

posted @ 2019-03-08 19:57  Kiss_the_rain  阅读(409)  评论(0编辑  收藏  举报