有一个四位数 a1a2a3a4,每一位数都是0到9之间的一个数字(多种解法)
2016-06-05 22:01
429 查看
上个月去面试,觉得很长知识!尤其是在算法中,这是一道以前在参加蓝桥杯中碰到过的题目,
但是第一次用这么久来想这道题。不知道这位大神有没有看到这篇博客,我在这里谢谢他,让我学会思考。
题目如下:
有一位四位数a1a2a3a4,每一位数都是0到9之间的一个数字,要求这四位数。满足下面两个条件:
a1 + a2 + a3 + a4 = 20
a1 < a2 < a3 < a4
接下来我写下两种实现的方式 :
解题分析:
共两种思路,第一种是暴力破解的方式,对条件a1, a2, a3, a4分别遍历然后判断,但这样十分费时!
第二种是数学方法,先证明出a1, a2, a3, a4所取得的最大值,然后缩小范围,降低时间复杂度!
第一种暴力破解:
第二种方式:数学方式
但是第一次用这么久来想这道题。不知道这位大神有没有看到这篇博客,我在这里谢谢他,让我学会思考。
题目如下:
有一位四位数a1a2a3a4,每一位数都是0到9之间的一个数字,要求这四位数。满足下面两个条件:
a1 + a2 + a3 + a4 = 20
a1 < a2 < a3 < a4
接下来我写下两种实现的方式 :
解题分析:
共两种思路,第一种是暴力破解的方式,对条件a1, a2, a3, a4分别遍历然后判断,但这样十分费时!
第二种是数学方法,先证明出a1, a2, a3, a4所取得的最大值,然后缩小范围,降低时间复杂度!
第一种暴力破解:
//杨鑫 #include <iostream> #include <cstdio> using namespace std; int main() { for(int a1 = 1; a1 <= 9; a1++) { for(int a2 = 0; a2 <= 9; a2++) { for(int a3 = 0; a3 <= 9; a3++) { for(int a4 = 0; a4 <= 9; a4++) { if(a1 + a2 + a3 + a4 == 20 && a1 < a2 && a1 < a3 && a1 < a4 && a2 < a3 && a2 < a4 && a3 < a4) cout<<"a1 = "<<a1<<" , "<<"a2 = "<<a2<<" , "<<"a3 = "<<a3<<" , "<<"a4 = "<<a4<<endl; } } } } }
第二种方式:数学方式
//杨鑫 #include <iostream> #include <cstdio> using namespace std; int main() { int a1Max, a2Max, a3Max, a4Max; a1Max = (20 - 6)/3 - 1; a2Max = (20 - 1 - 2 -3)/3; a3Max = 8; a4Max = 9; cout<<"a1, a2, a3, a4分别为如下:"<<endl; for(int a1 = 1; a1 <= a1Max; a1++) { for(int a2 = 2; a2 <= a2Max; a2++) { for(int a3 = 3; a3 <= a3Max; a3++) { for(int a4 = 4; a4 <= a4Max; a4++) { if(a1 + a2 + a3 + a4 == 20 && a1 < a2 && a2 < a3 && a2 < a4 && a3 < a4) { cout<<a1<<" , "<<a2<<" , "<<a3<<" , "<<a4<<endl; } } } } } return 0; }
相关文章推荐
- Java多线程编程(第三章)
- 6、DownloadManager 下载管理类
- Ubuntu下两个gcc版本切换
- zoj 2476 Total Amount
- c++第七次作业
- 【leetcode】206. Reverse Linked List
- API--Math
- Python Flask Web 第十课 —— flask-wtf
- 第二阶段冲刺(第十天)
- PHPExcel 导出表格 不知道好不好用
- springmvc参数绑定
- JS放大镜特效(兼容版)
- Adaboost原理、算法以及应用
- Web之浅谈前端开发-基于最基础的前端技术
- heredoc的使用
- dubbo学习笔记
- Java enum的用法详解
- OSG+VS2015+Win10配置
- OSG+VS2015+Win10配置
- python 用pdb调试