永发信息网

Visual C++ 6.0下编程问题——猜数字

答案:2  悬赏:0  手机版
解决时间 2021-07-19 13:35

1. 实验目的:掌握分支循环程序设计的方法,掌握, if-else,while, for语句的使用,掌握分支与循环语句的嵌套使用。

2. 实验内容:设计一个猜数字游戏,游戏规则如下:

1、游戏开始,电脑随机生成三个不重复的十以内的数字。
2、玩家输入他所猜测的三个数字
3、将玩家提交的数与电脑生成的数进行比较,结果显示成"*A*B"。A代表位置正确数字也正确,B代表数字正确但位置不正确,比如:"2A0B"表示您有2个数字的位置正确且数值也正确,除此以外,您还猜对了0个数字,但位置不对。
4、玩家共有7次机会,在7次内,如果结果为“3A0B”,游戏成功,退出游戏。如果7次里玩家都没有猜对游戏失败。

3. 难点提示:可以用while语句产生3个不一样的随机数

4. 标准输入输出:加粗加大的是输入部分

第一种情况:

请输入你猜测的数字:

9 8 7

0A0B

请输入你猜测的数字:

1 2 3

0A1B

请输入你猜测的数字:

4 5 6

0A2B

请输入你猜测的数字:

1 5 6

0A1B

请输入你猜测的数字:

1 4 6

1A0B

请输入你猜测的数字:

5 4 2

1A1B

请输入你猜测的数字:

5 4 3

1A2B

很遗憾,你没有在规定次数内猜对。答案是 345

第二种情况:

请输入你猜测的数字:

2 4 8

0A1B

请输入你猜测的数字:

2 5 6

1A2B

请输入你猜测的数字:

6 5 2

恭喜,你猜对了

下面是我自己编的程序,总有点问题,但检查不出来,请大虾帮忙看一下:

#include <cstdlib>
#include <ctime>
#include <iostream>
using namespace std;

int main()
{
int random[3],k,right,match,x,i,j,m[3];

srand (time(NULL));

random[1]=rand()*10/(RAND_MAX+1);

random[2]=rand()*10/(RAND_MAX+1);
while (random[2]==random[1])
{
return random[2];
}

random[3]=rand()*10/(RAND_MAX+1);
while (random[3]==random[1]||random[3]==random[2])
{
return random[3];
}

cout << "欢迎进入猜数字游戏,您将有7次机会:" << endl;
cout << "请输入您所猜的三位数" << endl;

for(k=1; k<=7; k++){
right=match=0;

cin >> m[1] >> m[2] >> m[3];


for(j=3; j>=1; j--) {

if(random[j]==m[j]) {right++;}

for(i=1; i<=3; i++) {
if(random[i]==m[j] && i!=j) {match++;}

}
}
if(right==3) {cout << "恭喜您,猜对了!" << endl; return 0;}

else
cout<< right <<"A" << match << "B" << endl;
cout<< "请重新输入:" << endl;
}
if(right!=3)
{cout << "对不起,您失败了。。。" << endl;
cout << random[1] << random[2] << random[3] << endl;
}

}

最佳答案

#include <cstdlib>
#include <ctime>
#include <iostream>
using namespace std;


int main()
{
int random[4],k,right,match,x,i,j,m[4]; //注意数组长度.数组下标从0.
//后面用1,2,3做下标.那么长度就要定义成4.
srand (time(NULL));

random[1]=rand()*10/(RAND_MAX+1);

random[2]=rand()*10/(RAND_MAX+1);


while (random[2]==random[1])
{
random[2]=rand()*10/(RAND_MAX+1);
}

random[3]=rand()*10/(RAND_MAX+1);

while (random[3]==random[1]||random[3]==random[2])
{
random[3]=rand()*10/(RAND_MAX+1);
}


cout << "欢迎进入猜数字游戏,您将有7次机会:" << endl;
cout << "请输入您所猜的三位数" << endl;
cout<<random[1]<<random[2]<<random[3]<<endl;
for(k=1; k<=7; k++)
{
right=match=0;

cin >> m[1] >> m[2] >> m[3];


for(j=1; j<=3; j++) {
if(random[j]==m[j]) {right++;}


for(i=1; i<=3; i++) {
if(i!=j && random[i]==m[j]) {match++;}
}
}
if(right==3) {cout << "恭喜您,猜对了!" << endl; return 0;}

else
cout<< right <<"A" << match << "B" << endl;
if(k!=7)
cout<< "请重新输入:" << endl;
}


if(right!=3)
{
cout << "对不起,您失败了。。。" << endl;
cout << random[1] << random[2] << random[3] << endl;
}

}

全部回答

if(right==3) {cout << "恭喜您,猜对了!" << endl; return 0;} 改为:if(right==3) {cout << "恭喜您,猜对了!" << endl;break;}即要退出for(i=1;i<=7; i++)循环

if(right!=3) {cout << "对不起,您失败了。。。" << endl; 改为:if(right==8) {cout << "对不起,您失败了。。。" << endl; 即已试了7次了还没成功

最后还多了个}吧 ....呵

我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
麻烦请帮我取几个网名?
我是1986年正月十一的也就是农历的1月11日是
诺基亚N97mini版是不是没有方向键?
哪有我们都是好孩子的mp3下载地址
赛尔号我的胡里亚..专家来鉴定下
抚州市胡志超的驾驶证
女朋友喊分手、我该怎么办?
赛尔号上:里奥斯任务
丝路英雄升级每级的经验各是多少,不同英雄殿
全站仪盘左盘右如何操作?
我的笔记本为什么不能无线上网?
怎么做清蒸宛鱼味道更鲜美?
帮帮忙!电脑的问题
基金经理佣金怎么算,私募基金从业员佣金提成
寻仙 乡野市井闻杂言 有什么奖励
推荐资讯
西安哪里有单卖橱柜拉篮的,得多少钱?
3GP的非常完美那里可以下
求<启示>高清下载网址.
在吉林101省道上是不有个心理医院?
考公务员要买那些资料和书本谢谢!
吃萍果减肥有用吗
为什么我的QQ空间不能看别人的照片别人也不加
一个人一生会遇到多少挫折,是早已命中注定了
一个贫困县一年的拨款有多少!
魔域怀旧区删档那里买的东西也会删吗?
QQ小窝空间是不是最近加长不了空间名称了?如
多普达C858怎么下2009QQ装上了呢
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?