| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 509 人关注过本帖
标题:寻求帮忙,急需猜数字游戏要求如下
只看楼主 加入收藏
谷雨寒
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2010-6-12
结帖率:100%
收藏
已结贴  问题点数:10 回复次数:2 
寻求帮忙,急需猜数字游戏要求如下
,要求程序完成以下功能:
1)    随机抽取一个4位整数k,要求这个四位数没有重复数字,最高位不是0
2)    提示玩家,猜一个数字
3)    根据玩家猜的数,与k比较,判断玩家猜的数字中位置正确的数字个数m和数字正确而位置不对的数的个数n,并以mAnB的形式输出
4)    如果玩家没有猜对,那么提示mAnB,让玩家继续猜,否则输出“你太棒了,这个数字就是****,你一共猜了*次哦!”
5)    如果玩家猜了8次还不对,那么提示玩家“你已经猜了8次了,还要继续吗?(1:yes/0:false),玩家选择1的话,就继续猜,如果选择0的话,就结束游戏,如果输入既不是1也不是0,提示用户“输入非法,重新输入”。
6)    如果玩家猜了15次还不对,那么提示玩家“你已经猜了15次啦,是不是方法不对啊?休息一会再来玩吧!”,然后退出游戏。
搜索更多相关主题的帖子: 数字 游戏 
2010-06-13 14:49
skyuser213
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:37
专家分:117
注 册:2010-5-9
收藏
得分:10 
程序代码:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

struct tag_Mark
{
  int nNumMark;
  int nPosMark;
  int nMark;
};

tag_Mark GetCorrect(char *szOne, char *szTwo);

int main(int argc, char* argv[])
{
  int nNumber = 0;
  int nTemp = 0;
  char cNumberArray[5] = {0};
  char cTempArray[5] = {0};
  char cTemp;
  tag_Mark Mark;

  srand( (unsigned)time( NULL ) ); //置随机数种子
  while (nNumber < 1000 || nNumber > 9999)
  {
    nNumber = rand();  //随机取一个4位整数
  }
  itoa(nNumber, cNumberArray, 10); //转换成数组

  while (1)
  {
    nTemp = 0;
    while (nTemp < 1000 || nTemp > 9999)
    {
      //system("cls");
      printf("请输入一个4位数:\r\n");
      scanf("%d", &nTemp);
      _flushall();
    }
    itoa(nTemp, cTempArray, 10);
   
    Mark = GetCorrect(cTempArray, cNumberArray);
    if (nTemp == nNumber)
    {
      printf("你太棒了,这个数字就是%d\r\n", nNumber);
      printf("你一共猜了%d次\r\n", Mark.nMark);
      system("pause");
      return 0;
    }
    printf("%dA%dB\r\n", Mark.nPosMark, Mark.nNumMark);

    if (Mark.nMark == 8)
    {
      printf("你已经猜了8次了,还要继续吗?(y/n)");
      cTemp = getchar();
      if (cTemp == 'Y' || cTemp == 'y')
      {
      }
      else if(cTemp == 'n' || cTemp == 'N')
      {
        return 0;
      }
    }

    if (Mark.nMark == 15)
    {
      printf("你已经猜了15次啦,是不是方法不对啊?休息一会再来玩吧!");
      system("pause");
      return 0;
    }
  }
    return 0;
}

tag_Mark GetCorrect(char *szOne, char *szTwo)
{
  static int nMark = 0;//记录猜测次数
  int nNumMark = 0; //记录数字正确而位置不对的数的个数
  int nPosMark = 0; //记录位置正确的数字个数
  int i = 0, j = 0;
  tag_Mark Mark;

 
  for (i = 0; i < 4; i++)
  {
    if (szOne[i] == szTwo[i])
    {
      nPosMark++;
    }  
  }

  for (i = 0; i < 4; i++)
  {
    for (j = 0; j < 4; j++)
    {
      if (szOne[i] == szTwo[j])
      {
        nNumMark++;
        break; //为了防止有重复,只记录第一个
      }
    }
  }
  nMark++; //查询次数加1

  Mark.nNumMark = nNumMark;
  Mark.nPosMark = nPosMark;
  Mark.nMark = nMark;

  return Mark;
}
闲着无聊帮你写了下.
2010-06-13 17:56
无雨无星
Rank: 2
等 级:论坛游民
帖 子:28
专家分:37
注 册:2010-6-23
收藏
得分:0 
回复 2楼 skyuser213
运行你的程序的时候我试着把答案也输出了一下
有一次答案是7585,可我输入8587 结果2A4B  
对于4B我有点歧义:应该在一个8,一个7 两个5 的情况下再4B吧?在8587我认为应该是属于3B的情况;
而且LZ要的程序应该没有重复数字的,答案有两个5了。。。
2010-10-12 21:23
快速回复:寻求帮忙,急需猜数字游戏要求如下
数据加载中...
 
   



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

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