标题:一个猜数字程序,我错在哪儿了,帮看下
只看楼主
蝴蝶效应
Rank: 1
等 级:新手上路
帖 子:55
专家分:0
注 册:2005-3-22
 问题点数:0 回复次数:7 
一个猜数字程序,我错在哪儿了,帮看下
4位数猜测,不对就给出提示A表示位置和数字都对,B表示数字对位置不对

在线等答案






#include <math.h>
#include <stdio.h>
void main(void)
{
int answer[4]={1,3,5,2},guess,a,b,times=0,i,j;    /*初始化被猜答案为1352*/
printf("please guess\n");
while(a!=4)
{                                                 /*进入猜数字循环*/
a=0;
b=0;
times++;                                          /*猜测次数加1*/
printf("%d",times);                               /*显示猜测次数*/
scanf("%d",&guess);                               /*数取玩家输入数字*/
for(i=3;i>-1;i--)
{                                                 /*开始循环*/
for(j=0;j<4;j++)
{
if((int)(guess/pow10(i))==answer[j])
if(i+j==3)                                        /*如果位置相同A加1*/
a=a+1;
else
b=b+1;                                            /*如果位置不同B加1*/
}
}
guess=guess-(int)(guess/pow10(i)*pow10(i)
}                                                 /*对比下一位猜测数字*/
printf("%dA%dB\n",a,b);                           /*显示本次猜测AB正确性*/
}

搜索更多相关主题的帖子: 数字 times void 
2005-03-22 20:08
Knocker
Rank: 8Rank: 8
等 级:贵宾
威 望:47
帖 子:10454
专家分:603
注 册:2004-6-1
得分:0 
就是程式结果对,你的算法也不行,改了改你的程式,自己体会一下吧,有时候多加几个变量程序效率更高,还有这个程序没有对非法输入进行判断以及重复数字的判断(应该不充许吧?),自己加吧.

#include <stdio.h>
void main(void)
{
    int answer[4]=
    {
        1,3,5,2
    }
    ,guess,a,b,times=0,i,j,GUESS1[4],Errors=0 ;
    /*初始化被猜答案为1352*/
   
    printf("please guess\n");
    while(1)
    {
        printf("%d    ",times);
        /*显示猜测次数*/
        scanf("%d",&guess);
        i=3 ;
        a=0,b=0 ;
        while(guess)
        {
            GUESS1[i--]=guess%10 ;
            /*将未尾数赋给GUESS[i]*/
            guess/=10 ;
            /*guess缩位*/
            if(guess&&i<0)
            {
                printf("输入超过4位!请重输!\n\n");
                Errors=1 ;
                break ;
            }
        }
        if(!Errors)
        {
            for(i=0;i<4;i++)
            {
               
                for(j=0;j<4;j++)
                {
                    if(i==j)
                    {
                        if(GUESS1[i]==answer[j])a++;
                    }
                    else
                    {
                        if(GUESS1[i]==answer[j])b++;
                    }
                }
            }
            printf("%dA%dB\n",a,b);
            /*显示本次猜测AB正确性*/
            times++;
        }
        else
        {
            Errors=0 ;
        }
    }
}

九洲方除百尺冰,映秀又遭蛮牛耕。汽笛嘶鸣国旗半,哀伤尽处是重生。     -老K
治国就是治吏。礼义廉耻,国之四维。四维不张,国之不国。   -毛泽东
2005-03-22 21:09
蝴蝶效应
Rank: 1
等 级:新手上路
帖 子:55
专家分:0
注 册:2005-3-22
得分:0 

谢谢先


立志:吃遍成都路边摊!
2005-03-22 21:38
蝴蝶效应
Rank: 1
等 级:新手上路
帖 子:55
专家分:0
注 册:2005-3-22
得分:0 
大哥,错的啊,无法编译

立志:吃遍成都路边摊!
2005-03-22 23:14
C世界
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2005-3-19
得分:0 
没错吧,我试了一下.不过如果输入非法数字就会陷入死循环.
2005-03-22 23:50
蝴蝶效应
Rank: 1
等 级:新手上路
帖 子:55
专家分:0
注 册:2005-3-22
得分:0 
#include <math.h>
#include <stdio.h>
void main(void)
{
int answer[4]={1,3,5,2},guess,a,b,times=0,i,j;    /*初始化被猜答案为1352*/
printf("please guess\n");
while(a!=4)
{                                                 /*进入猜数字循环*/
a=0;
b=0;
times++;                                          /*猜测次数加1*/
printf("%d",times);                               /*显示猜测次数*/
scanf("%d",&guess);                               /*数取玩家输入数字*/
for(i=3;i>-1;i--)
{                                                 /*开始循环*/
for(j=0;j<4;j++)
{
if((int)(guess/pow10(i))==answer[j])
if(i+j==3)                                        /*如果位置相同A加1*/
a=a+1;
else
b=b+1;                                            /*如果位置不同B加1*/
}
}
guess=guess-(int)(guess/pow10(i))*pow10(i);
}                                                 /*对比下一位猜测数字*/
printf("%dA%dB\n",a,b);                           /*显示本次猜测AB正确性*/
}



我的我修改了,但是和你有同样的问题就是死循环,今天搞定,

立志:吃遍成都路边摊!
2005-03-23 11:52
Knocker
Rank: 8Rank: 8
等 级:贵宾
威 望:47
帖 子:10454
专家分:603
注 册:2004-6-1
得分:0 
死循环问题很好解决,去了解一下scanf的返回值的意义,还有个 fflush ()的清流函数。

你的程序效率太差,空间换效率是编程中常常用到方法.

九洲方除百尺冰,映秀又遭蛮牛耕。汽笛嘶鸣国旗半,哀伤尽处是重生。     -老K
治国就是治吏。礼义廉耻,国之四维。四维不张,国之不国。   -毛泽东
2005-03-23 12:24
蝴蝶效应
Rank: 1
等 级:新手上路
帖 子:55
专家分:0
注 册:2005-3-22
得分:0 
是啊,正在修改当中,新人嘛!

立志:吃遍成都路边摊!
2005-03-23 14:07



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-13828-1-1.html




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

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