原题链接:蓝桥杯2013年第四届真题-带分数
/*先用深搜找出所有的1~9数字排列组合,对每一次排列组合结果划分为三个数字 例如第一次深搜结果为123456789,对其第一次划分1 2 3456789 计算1+2/3456789结果 第二次划分1 23 456789 计算1+23/456789 ………………*/ #include<iostream> using namespace std; int ans = 0; int v[10]; int sum[10]; double N; int change(int left, int right) { int num = 0; int temp = 1; int k = right - left; for (int i = left + k; i > left; i--) { num += sum[i] * temp; temp *= 10; } return num; } void judge() { int temp[9] = { 0,1,2,3,4,5,6,7,8 }; double k; for (int i = 1; i <= 7; i++) { for (int j = i + 1; j <= 8; j++) { k = change(0, i) + (change(i, j)*1.0 / change(j, 9)); if (N == k) ans++; } } } void dfs(int step) { if (step == 10) { judge(); return; } for (int i = 1; i < 10; i++) { if (v[i] == 0) { v[i] = 1; sum[step] = i; dfs(step + 1); v[i] = 0; } } } int main() { cin >> N; dfs(1); cout << ans; return 0; }
0.0分
2 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复