将1,2,3,…,9共9个数排成下列的三角形(用C++编程)将1,2,…,9共9个数排成下列形态的三
答案:2 悬赏:30 手机版
解决时间 2021-02-11 06:27
- 提问者网友:玫瑰园
- 2021-02-10 17:10
将1,2,3,…,9共9个数排成下列的三角形(用C++编程)将1,2,…,9共9个数排成下列形态的三
最佳答案
- 五星知识达人网友:渡鹤影
- 2021-02-10 18:34
要使效率高,那就不能用递归函数,而要自己去迭代.#include stdio.hvoid main(){//设一个查找表,可以快速地判断某数是否为素数bool prime[40]={0,0,1,1,0,1,0,1,0,0,0,1,0,1,0,0,0,1,0,1,0,0,0,1,0,0,0,0,0,1,0,1,0,0,0,0,0,1,0,0};//快速判断哪些数已经被选中bool used[21]=;//a[0]无用,a[1]到a[20]分别存放选出的数//因为考虑到题目要求的循环性//所有的解都可以位移使得1出现在a[1]位置//所以我们就直接规定1放在a[1]int a[21]=;//已经选中的数的个数,int cnt=1;//当发生无数可选的情况时,需要回退一步//此变量用来表示是否发生了回退bool tag=false;int i;while(cnt<20){//如果发生了回退,则直接从上次选的数的后面开始查找//不是回退的话,则从2开始查找 for(i=(tag?a[cnt+1]+1:2);i<21;i++)if(!used[i] && prime[i+a[cnt]]){//找到符合条件的数a[++cnt]=i;used[i]=true;tag=false;break;}//找到解if(cnt==20 && prime[a[1]+a[20]]){for(i=1;i<21;i++)printf(%d ,a[i]);return;}//如果发生了无数可选的情况,则回退一步else if(cnt==20 || i==21){used[a[cnt--]]=false;tag=true; }}}
全部回答
- 1楼网友:山河有幸埋战骨
- 2021-02-10 20:01
我明天再问问老师,叫他解释下这个问题
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯