トピック:
説明
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;
}