前言:
目前兄弟们对“简单的搜索与回溯算法程序”大体比较关心,看官们都需要学习一些“简单的搜索与回溯算法程序”的相关资讯。那么小编同时在网上网罗了一些关于“简单的搜索与回溯算法程序””的相关资讯,希望大家能喜欢,各位老铁们快快来了解一下吧!题目描述
顾小影和王小譞一起玩猜数游戏,首先是顾小影出题,任意给一个五位数正整数abcde和一个数X,在五位数中,有些位置上的数是固定不变的,有些位置的数是不确定的,王小譞要统计共有多少个不同的5位数满足(a*7+b*6+c*5+d*4+e*3) % 5=X。
输入
共两行。第一行:从高位 到低位依次给出每位上的数字,若为-1,表示该位不确定,若为0~9,表示该位固定为此数 字。
第二行:X。
输出
一行:有多少个满足要求的五位数。
样例输入
2 3 4 5 -10样例输出
2算分分析:
abcde这个5位数的每一位都有可能是-1,如果a为-1,那a有1-9这9种可能(首位不可能是0,否则就成了4位数了),如果其他4个位置上是-1,则有0-9这10种可能;如果不是-1,那就只有该数本身这一种可能,根据这个思路,把5个数都搜索一遍就能得出结果。
参考程序和运行结果:
#include<bits/stdc++.h>using namespace std;int a[6],b[6],x;int sum=0;void dfs(int ion){ if(ion>5) { if((b[1]*7+b[2]*6+b[3]*5+b[4]*4+b[5]*3)%5==x) sum++; return ; } else if(ion==1)//首位数 { if(a[ion]!=-1) dfs(ion+1); else { for(int i=1; i<=9; i++){ //首位是-1,只有9种可能 b[ion]=i; dfs(ion+1); } } } else//另外4位 { if(a[ion]!=-1) dfs(ion+1); else { for(int i=0; i<=9; i++){ //非首位是-1,有10种可能 b[ion]=i; dfs(ion+1); } } }}int main(){ for(int i=1; i<=5; i++) cin>>a[i]; cin>>x; dfs(1); cout<<sum; return 0;}
版权声明:
本站文章均来自互联网搜集,如有侵犯您的权益,请联系我们删除,谢谢。
标签: #简单的搜索与回溯算法程序