解题思路:提供一种新型的解题思路,利用头文件#include <algorithm>下的next_permutation,简单介绍一下它,next_permutation(start,end)是algorithm标准库中的一个标准函数库,它可以在表示[start,end)内存的数组中严格产生下一个字典序排列。具体来说就是把[2,3,1]---->[3,1,2]---->[3,2,1]
#include <iostream> #include <algorithm> using namespace std; int main() { int a[10]; for(int i=1;i<=9;i++) { a[i]=i;//将1,2,3,4,5,6,7,8,9放入数组 } long long x,y,z; do{ x=a[1]*100+a[2]*10+a[3]; y=a[4]*100+a[5]*10+a[6]; z=a[7]*100+a[8]*10+a[9]; if(2*x==y&&3*x==z&&3*y==2*z)//避免浮点误差 cout<<x<<" "<<y<<" "<<z<<endl; }while(next_permutation(a+1,a+10));//全排列完之后结束 return 0; } //下面是任意比例的X,Y,Z的求解 #include <iostream> #include <algorithm> using namespace std; long long x,y,z,a,b,c;//a,b,c表示x,y,z三个数的比例 int main() { int a[10]; cin>>a>>b>>c; for(int i=1;i<=9;i++) { a[i]=i;//将1,2,3,4,5,6,7,8,9放入数组 } do{ x=a[1]*100+a[2]*10+a[3]; y=a[4]*100+a[5]*10+a[6]; z=a[7]*100+a[8]*10+a[9]; if(b*x==y*a&&c*y==b*z)//避免浮点误差 cout<<x<<" "<<y<<" "<<z<<endl; }while(next_permutation(a+1,a+10));//全排列完之后结束 return 0; }
0.0分
1 人评分