原题链接:蓝桥杯算法提高VIP-寻找三位数
解题思路:提供一种新型的解题思路,利用头文件#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 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复