大一新手请教~~

TX博 2012-12-04 11:20:24
我是大一软件月学院的,这是我的一条代码
问题描述
编写一个猜数字游戏的程序,程序随机选择一个l到1000的数
I have a number between 1 and 1000.
Can you guess my number?
Please type your first guess.
然后游戏者输人第一个结果。程序响应如下:
1. Excellent! You guessed the number!
Would you like to play again (y or n)?
2. Too low. Try again.
3. Too high. Try again.

如果游戏考猜错,则程序进行循环.直到猜对。程序通过Too high或To low消息帮助学生接近正确答案。说明:这个程序中采用的查找技术称为二分查找。计算游戏者已猜过的次数。如果次数值为10以下,则打印“Either you know the secret or you got lucky!”。如果10次猜中,则打印“Ahak! You know the secrete”。如果超过10次才猜中,则打印“You should be able to do better!” 如何在最少的次数内猜中呢?为什么1到l000的数字能在10次之内猜中呢?



请教前辈们有没有可以改进的地方,我不想用loop,如果不用的话怎么改?
另外,还有一个作业是递归方法编写汉诺塔,不太会,可不可以告诉我应该怎么思考?谢谢各位~~小弟打算常住这里了~~


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

int guess(int num,int guess)
{
if (guess==num)
{
cout<<"Excellent! You guessed the number!"<<endl;
return 1;
}
if(guess<num)
return 2;
if(guess>num)
return 3;

}

int function1()
{
cout<<"Would you like to play again (y or n)?";
char respond;
cin>>respond;
if (respond=='y'||respond=='Y')
return 0;

}

int main()
{
int a;
srand(time(0));
int num,guesser;
num=1+rand()%999;

cout<<"I have a number between 1 and 1000."<<endl;
cout<<"Can you guess it?"<<endl;
cout<<"Please type your first guess: ";
cin>>guesser;
static int i=1;
a=guess(num,guesser);
loop:

i++;

switch(a)
{
case 1:{
if (i<10)
{
cout<<"Either you know the secret or you got lucky!"<<endl;
}
if (i==10)
{
cout<<"Ahak! You know the secrete"<<endl;
}
if (i>10)
{
cout<<"You should be able to do better!"<<endl;
}
int k=function1();
if (k==0)
main();

}
break;
case 2:{
cout<<"Too low. Try again.";
int guesser;
cin>>guesser;
a=guess(num,guesser);
goto loop;
}
break;
case 3:{
cout<<"Too high. Try again.";
int guesser;
cin>>guesser;
a=guess(num,guesser);
goto loop;
}
break;
}
...全文
141 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
Johnkey_Chen 2012-12-05
  • 打赏
  • 举报
回复
因为2^10=1024 > 1000, 所以10次是肯定能确定要猜的数字的。 尽量不要用goto,这里直接while(1)就行了
swordtan 2012-12-05
  • 打赏
  • 举报
回复
要将a上的n块通过辅助位置b移到c上,则分为三步: 1.将a最上面的n-1块,通过辅助位置c,移到b上 2.将a最下面一块移到c上 3.将b上的n-1块,通过辅助位置a,移到c
MrLiu1020 2012-12-05
  • 打赏
  • 举报
回复
同楼上的 我觉得用while比较好理解
TX博 2012-12-05
  • 打赏
  • 举报
回复
引用 1 楼 Johnkey_Chen 的回复:
因为2^10=1024 > 1000, 所以10次是肯定能确定要猜的数字的。 尽量不要用goto,这里直接while(1)就行了
我改过了~谢谢~

64,635

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧