【ブルーブリッジカップ】2018決勝最大の商品(フルアレンジ暴力)

トピック:

説明
1〜9の数字のタイトル9は2つのグループ分けられ、乗算が介在します。
場合によっては、それらの積には1〜9の数字9しか含まれず、各桁は1回だけ表示されます。
例:
984672 * 351 = 345619872
98751 * 3462 = 341875962
9 * 87146325 = 784316925
...
このルールに準拠する計算は多数あります。これらすべての計算の中で最大の積はどれですか?
出力
答えを示す整数を出力します


コード:

注:製品は、1〜9のそれぞれに1回ずつ表示される必要があります。

暴力はすべて手配され、数秒後に答えが出されます

#include <iostream>
#include <algorithm>
#include <string>
#include <set>
using namespace std;
typedef long long ll;
ll ans=0;
string s="123456789"; 
int main() 
{
    
    
	do{
    
    
		for(int i=1;i<9;i++) //前一个数占的位数最少1位,最多8位
		{
    
    
			string a,b;
			for(int j=0;j<i;j++) a+=s[j]; //前一个数
			for(int k=i;k<9;k++) b+=s[k]; //后一个数
			ll aa = stoi(a); //string转int (c++11)
			ll bb = stoi(b);
			ll mul = aa*bb; //乘积
			ll temp = mul;
			set<int> s; 
			while(temp) //把各位数放入set
			{
    
    
				if(temp%10==0) break; //出现0就是错误,退出
				s.insert(temp%10);
				temp/=10;
			}
			if(s.size()==9) ans=max(ans,mul); //有九个不同的数,就是1-9,更新ans
		}	
	}while(next_permutation(s.begin(),s.end())); //全排列
	
	//cout<<ans;
	//cout<<843973902; 错误答案!!! 没看清题目,题目要求答案也只包含1-9各一次 
	cout<<839542176;
	return 0;
}

おすすめ

転載: blog.csdn.net/weixin_45260385/article/details/109320978