c语言中 递归问题

有一个数组,我先输入一个我猜的组,比如说abcd然后我输入有几个b,b代表的是你输入的猜的组里面有几个位置并且字母相同的字母我再输入有几个w,w代表的是我输入的猜的组里面... 有一个数组,我先输入一个我猜的组,比如说abcd
然后我输入有几个b, b代表的是你输入的猜的组里面有几个位置并且字母相同的字母
我再输入有几个w, w代表的是我输入的猜的组里面有几个字母相同,但是位置跟答案数组不一样。
然后猜所有可能是答案数组的数组。
这是一个输出:
Enter the pattern length: 3
Input the guess pattern: abc
Enter the number of black pegs in the feedback: 2
Enter the number of white pegs in the feedback: 0
The possible key patterns are:
aac
aba
abb
abd
abe
abf
acc
adc
aec
afc
bbc
cbc
dbc
ebc
fbc
一点都不会! 求大神!
这个程序一定要用递归。
展开
 我来答
shangke7788
2012-11-11 · 超过13用户采纳过TA的回答
知道答主
回答量:37
采纳率:0%
帮助的人:29.9万
展开全部
// 题意没有完全说清楚,很多地方还是YY的,只是把样例过了

#include <stdio.h>
char ss[110], s[110];
int b, w, n;
void dfs(int xb, int xw, int now) {
// 不够
if (b - xb > n - now) {
return;
}
// 递归结束标志,输出
if (now == n) {
if (xb == b && xw == w) {
s[n] = '\0';
printf("%s\n", s);
}
return;
}
for ( char i='a'; i<='f'; i++) {
s[now] = i;
int ww = 0;
for ( int k=0; k<now; k++) {
if (s[now] == s[k]) {
ww = -10;
break;
}
}
if (ww >= 0) {
for ( int j=0; j<n; j++) {
if (j == now) continue;
// 当前的是s[now]与其他的ss[j]一样,w+1
ww += (s[now] == ss[j]);
}
} else {
ww = 0;
if (s[now] == ss[now]) {
for ( int j=0; j<n; j++) {
ww -= (s[now] == ss[j]);
}
}
}
// 当前的s[now]与ss[now]一样时,b+1
dfs(xb+(s[now]==ss[now]), xw+ww, now+1);
}
}
int main() {
printf("Enter the pattern length: ");
scanf("%d", &n);
printf("Input the guess pattern: ");
scanf("%s", ss);
printf("Enter the number of black pegs in the feedback: ");
scanf("%d", &b);
printf("Enter the number of white pegs in the feedback: ");
scanf("%d", &w);
printf("The possible key patterns are:\n");
dfs(0, 0, 0);
return 0;
}
追问
那如果这样呢?
Enter the pattern length: 12
Input the guess pattern: aaaaaabbbbbb
Enter the number of black pegs in the feedback: 10
Enter the number of white pegs in the feedback: 2
The possible key patterns are:
aaaaababbbbb
aaaaabbabbbb
aaaaabbbabbb
aaaaabbbbabb
aaaaabbbbbab
aaaaabbbbbba
aaaabaabbbbb
aaaabababbbb
还有一些输出我没打出来!
追答
你这个完全和上面的有矛盾,最初你给的样例中,按照你现在的意思,aac相对于abc来说,应该是2b1w,而不是原来的2b0w,但是你也打出来了。所以我说你的信息给的不全,到底是什么情况下应该是w,可以重复吗?或者你的样例有问题,我只能yy得把你样例过了。
534009160
2012-11-09 · 超过11用户采纳过TA的回答
知道答主
回答量:92
采纳率:0%
帮助的人:34.7万
展开全部
#include<stdio.h>
int w(char g[],char in[],int n )
{
int a,b;
for(a=0,b=0;a<n;a++)
if(g[a]==in[a]) b++;
return b;
}
int b(char g[],char in[],int n )
{
int a,b,c=0;
for(a=0;a<n;a++)
for(b=0;b<n;b++)
if(in[b]==g[a]) c++;
return c;
}
void main()
{
int n,i;
char g[20],in[20];char k;
printf("Enter the pattern length:");
scanf("%d",&n);
printf("\nPlease input the guess pattern:");
getchar();
for(i=0;i<n;i++)
{
scanf("%c",&g[i]);
}
printf("\nPlease input the pattern:");
getchar();
for(i=0;i<n;i++)
{
scanf("%c",&in[i]);
}
printf("\n");
if(w(g,in,n)!=n) printf("w%db%d\n",w(g,in,n),b(g,in,n));
else printf("Congratulations on your right\n");
k=getchar();k=getchar();
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式