m=n=0;
if(i!=j&&b[j]==a[i])
有什么意义?
在我看的一些书中,%i和%d没有区别的

我想要快乐。
2006-12-13 13:28
恩,改了后几个,这个倒是忽略了,你说得对。是我没改好。
2006-12-13 13:39
2006-12-13 13:46
先参考这个程序
#include <stdio.h>
int main(void)
{
int i,j,a[4],m=0,n=0,b[]={1,2,3,4};
for(i=0;i<4;i++)
scanf("%d",&a[i]);
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
if(a[i]==b[j])
if(i==j)
m++;
else
n++;
}
printf("righ:%d warn:%d\n",m,n);
return 0;
}

2006-12-13 13:47
还没解决吗?
那除非是你输入不合法了,如果你输入的数字其中有两个或两个以上的数字相同的话,这个程序就不行了,
不过可以稍微修改一下,加个tag[4]标记数组就行了.
#include "stdio.h"
#include "conio.h"
typedef enum{false,true}bool;
int m,n;
main()
{
int i,j,k;
int a[4];
static int b[4]={1,2,3,4};
bool tag[4];
for(k=0;k<10;k++) /*一共可以猜10次*/
{for(i=0;i<4;tag[i]=false,i++) scanf("%d",&a[i]); /*输入4个数字*/
printf("\n");
m=n=0;
for(i=0;i<4;i++)
{
if(b[i]==a[i])
{
if(tag[i]==false)
{
tag[i]=true;
m++;
}
} /*如果数字与位子都正确的提示。*/
else
{
for (j=0;j<4;j++)
{
if(i!=j&&b[j]==a[i]&&tag[j]==false)
{
n=n+1;
tag[j]=true;
}
}
}
} /*数字对了,但是位子没对的提示。*/
printf("A%d,B%d",m,n);
getch();
if(m==4) break; /*当全部猜对后,跳出循环*/
}
}
2006-12-13 13:57
2006-12-13 14:25
真的很感谢两位前辈的指导,让我又学到不少东西。
可是,我上面的两个问题并没有得到解决。
我觉得算法没错,但就是不知道问题出来哪里.
2006-12-13 14:33
2006-12-13 14:45
2006-12-13 14:55
2006-12-13 15:06