| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 477 人关注过本帖
标题:求高手帮忙修改一下这个错误。。。
只看楼主 加入收藏
ml3679450
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2013-6-9
结帖率:0
收藏
已结贴  问题点数:20 回复次数:3 
求高手帮忙修改一下这个错误。。。
#include<stdio.h>
 #include<stdlib.h>  
 #include<time.h>
int EachDiff(int a[],int n)
{
    int i,j;
   for(i=0;i<n;i++)
     for(j=i+1;j<n;j++)
         if(a[i]==a[j])
             return 0;
         else  
             return 1;
}  

 int JudgeA(int a[],int b[],int n)
 {  
     int i,result=0;  
     for(i=0;i<n;i++)  
     {
    if(a[i]==b[i])
        result++;
     }
     return result;
 }  
 
  int JudgeB(int a[],int b[],int n)
  {  
     int i,j,result=0;
      for(i=0;i<n;i++)
         for(j=0;j<n;j++)
             if(a[i]==b[j]&&i!=j)
                 return result;
  }  

  void CreateNum(int a[],int n)  
  {  int i;  
  srand(time(0));  
  do  
  {  
      for(i=0;i<n;i++)a[i]=rand()%10;
  }
  
  while(!EachDiff(a,n));
  }  

    int JudgeInput(int a[],int n)
    {  
        int i;
    if(!EachDiff(a,n))  return 0;
    else  
        for(i=0;i<n;i++)
            if(a[i]>9||a[i]<0)  return 0;
            else  return 1;
    }  

    int main()  
{  
//system();  
int a[4],b[4],i;  
int fth=1;
printf("作者 Dante -- 谢煜东");
printf("\t\t 欢迎来到猜数字游戏\n\n");
printf(" 计算机想好了一个4位无重复数字,首位可以为零。\n 例如:0913是可以的,3502也是可以的,6787不可以。\n");
printf(" 现在您想办法把这个数字猜出来。\n\n");  
printf(" 每猜一个数字,计算机会根据这个数字给出几A几B:\n 其中A前面的数字表示位置正确的数的个数,\n 而B前的数字表示数字正确而位置不对的数的个数。\n\n");  
//printf(" 如正确答案为5234,而猜的人猜5346,则是1A2B。\n 其中有一个5的位置对了,记为1A;\n 而3和4这两个数字对了,而位置没对,因此记为2B;\n 合起来就是1A2B。\n\n");
printf(" 记住!1:你共有8次机会,2:输入的数字不能重复。\n\n");  
printf(" 当出现\"第几次:\"字样并等待的时候,您就可以输入你要猜测的四位数字,\n 输入完之后回车确认。祝您开心\n\n 明白之后任意键游戏正式开始!");
getchar();
 CreateNum(a,4);
 system("cls");
 printf("\t\t现在可以输入你要猜的四位数字了,输入之后回车确认。\n");   
 while(fth<=8)
 {  
     int t=1000;
     printf("第%d次: ",fth);
     scanf("%d",&b[0]);
        for(i=0;i<3;i++)  
        {
            b[i+1]=b[i]%t;
            b[i]=b[i]/t;
            t/=10;  
        }  
        for(i=0;i<4;i++)  
            if(JudgeInput(b,4)==0)
            {  
                printf("您的输入有问题,请重新输入\n");
                continue;
            }  
            if(JudgeA(a,b,4)==4)
            {  
                printf("\t结果: 答对了!好聪明!");
                system("pause");
                //return;
            }
printf("\t结果:您有%d个数字和位置都对了,有%d个数字对了而位置没对\n",JudgeA(a,b,4),JudgeB(a,b,4));  
fth++;  
}  
 printf("\n很遗憾。正确答案是:");
   for(i=0;i<4;i++)
     printf("%d",a[i]);
 printf("下次再玩吧!88\n");
 system("pause");
 return 0;
}
不能保证位数上的数字不相同,也不能保证有数字对了,但是位置不对,答案中会出现相同的数字,最后运行结果。即使有对了的数字,也不会显示有对了的数字而位置没有对。
搜索更多相关主题的帖子: result return include 
2013-06-09 17:06
pauljames
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:千里冰封
威 望:9
帖 子:1555
专家分:10000
注 册:2011-5-8
收藏
得分:7 
要实现什么功能?

经常不在线不能及时回复短消息,如有c/单片机/运动控制/数据采集等方面的项目难题可加qq1921826084。
2013-06-10 07:37
成长的野人
Rank: 2
等 级:论坛游民
帖 子:7
专家分:17
注 册:2013-6-3
收藏
得分:7 
int EachDiff(int a[],int n)
{
    int i,j;
   for(i=0;i<n;i++)
     for(j=i+1;j<n;j++)
         if(a[i]==a[j])
             return 0;       //return 1 要等全判断后再返回。//
       return 1;
}  有重复返回 0 ,无重复继续判断。
int JudgeInput(int a[],int n)
    {  
        int i;
    if(!EachDiff(a,n))  return 0;
    else  
        for(i=0;i<n;i++)
            if(a[i]>9||a[i]<0)  return 0;      //return 1 要等全判断后再返回。//
        return 1;
    }  
 int JudgeB(int a[],int b[],int n)
    应该先计数再返回。
 主程序里的while语句中的 for(i=0;i<4;i++)应该删掉吧,个人感觉没用。
2013-06-10 10:28
蚕头燕尾
Rank: 10Rank: 10Rank: 10
来 自:Gryffindo
等 级:贵宾
威 望:12
帖 子:734
专家分:1546
注 册:2013-3-24
收藏
得分:7 
楼主,

已经改好了么?改好了我就直接不看了。。。


学习编程,为的是表达自己的思想,而不是被别人的思想所禁锢。要先明白自己想干嘛,而不要先问别人让你干嘛。               

                                                                                                                    Black Cat      Hello Tomorrow~
2013-06-10 23:28
快速回复:求高手帮忙修改一下这个错误。。。
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.035567 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved