龙空技术网

C++搜索与回溯算法实战题解:猜数游戏

信息学教练农夫约翰 109

前言:

目前兄弟们对“简单的搜索与回溯算法程序”大体比较关心,看官们都需要学习一些“简单的搜索与回溯算法程序”的相关资讯。那么小编同时在网上网罗了一些关于“简单的搜索与回溯算法程序””的相关资讯,希望大家能喜欢,各位老铁们快快来了解一下吧!

题目描述

顾小影和王小譞一起玩猜数游戏,首先是顾小影出题,任意给一个五位数正整数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;}

标签: #简单的搜索与回溯算法程序