原题链接:蓝桥杯算法提高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、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复