题目描述:
在数字1~9中,组成三对三位数(每个数字只能选一次),要求输出组成的三位数比例为1:2:3
next_permutation用法如下:
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
int a[3] = {1,2,3};
while(next_permutation(a,a+3))
{
cout << a[0] << " " << a[1] << " " << a[2] << endl;
}
return 0;
}
运行结果:
既然是暴力求解,该函数所使用的时间肯定不会短,这就要求我们在使用时要结合if语句,来减少时间上的浪费。
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
int main()
{
int a[9] = {1,2,3,4,5,6,7,8,9};
int a1,a2,a3;
while(next_permutation(a,a+9))
{
a1 = a[0]*100 + a[1]*10 + a[2];
if(3*a1 > 987) //因为在9个数字中随机抽取的最大数为987,所以最小数的3倍不能超过它
continue;
a2 = a[3]*100 + a[4]*10 + a[5];
a3 = a[6]*100 + a[7]*10 + a[8];
if(a3 < 369)//同理最大数不能小于最小数的3倍
continue;
if(a2 == 2*a1 && 3*a2 == 2*a3)
cout << a1 << " " << a2 << " " << a3 << endl;
}
return 0;
}