| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1216 人关注过本帖
标题:文曲星上的猜数字游戏,大家指点一下
只看楼主 加入收藏
niyoubudou
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2007-8-3
收藏
 问题点数:0 回复次数:9 
文曲星上的猜数字游戏,大家指点一下

我刚学编程不久,用VC++编写的模仿文曲星上猜数字的游戏,请大家指点一下.谢谢

#include<stdio.h>
#include<stdlib.h>
#include<time.h>

//编写函数 产生(0-9)四个不一样的随机数

void suiji(int a[])
{
int i,j;
a[0]=rand()%10;
for(i=1;i<4;i++)
{
while(1)
{
a[i]=rand()%10;
for(j=0;j<i;j++)
{
if(a[i]==a[j])
break;
}
if(j==i)
break;
}
}
}

//输出函数
void display(int a[])
{
int i;
for(i=0;i<4;i++)
{
printf("%d ",a[i]);
}
putchar('\n');
}

void main()
{
//only记录仅数字猜对的个数,all记录数字和位置都对的个数,count记录总猜测次数
int i,j,only,all,count=0,sys[4],guess[4]; printf("您共有六次猜测机会!\n\n");
srand((unsigned)time(NULL));
suiji(sys);
do
{
only=0;
all=0;
printf("第%d次:\n",count+1);
for(i=0;i<4;i++)
{
printf("请输入第%d个位置的数字:",i+1);
scanf("%d",&guess[i]);
}
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
{
if(guess[i]==sys[j] && i==j)
all++;
if(guess[i]==sys[j] && i!=j)
only++;
}
}
if(all==4)
break;
printf("======================================================\n");
printf("数字和位置都猜对的有%d个!\n",all);
printf("仅数字猜对的有%d个!\n",only);
printf("======================================================\n\n");
count++;
}while (count!=6);
if(all==4)
{
printf("恭喜您!猜对了!真聪明!\n");
display(sys);
}
else
{
printf("很遗憾!您没能猜对!\n");
printf("正确答案是:");
display(sys);
}
}

搜索更多相关主题的帖子: 文曲星 数字 游戏 include 
2007-08-04 02:17
不在犯罪现场
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2007-8-1
收藏
得分:0 
while(1)
{
a[i]=rand()%10;
for(j=0;j<i;j++)
{
if(a[i]==a[j])
break;
}
if(j==i)
break;
}
这个WHILE(1)在这起什么作用啊?!

2007-08-04 04:09
niyoubudou
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2007-8-3
收藏
得分:0 

这个while(1)就是不断给a[i]随机赋值,直到和前几个数不一样为止.目的就是产生四个不一样的随机数

[此贴子已经被作者于2007-8-4 15:18:36编辑过]


2007-08-04 15:16
不在犯罪现场
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2007-8-1
收藏
得分:0 
if(j==i)
break;那这句有什么用?i在什么情况下会等于j?

2007-08-05 00:21
niyoubudou
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2007-8-3
收藏
得分:0 
如果a[i]与前几个数字都不相等的话,i不就等于j了吗

2007-08-05 00:56
hmx7221159
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2005-10-30
收藏
得分:0 

break作用为结束循环,因为循环
for(j=0;j<i;j++)
{
if(a[i]==a[j])
break;
}
结束后,因为自加后判断j<i不成立,j刚好和i相等,跳出循环。

格式很清晰,可惜看多了C++看C还真不习惯看了会才看懂

2007-08-05 01:01
不在犯罪现场
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2007-8-1
收藏
得分:0 
哦哦,看明白了。谢谢啊。。。呵呵
if(j==i)
break;
是为了跳出while(1)循环的吧?

2007-08-05 01:13
hmx7221159
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2005-10-30
收藏
得分:0 
以下是引用不在犯罪现场在2007-8-5 1:13:31的发言:
哦哦,看明白了。谢谢啊。。。呵呵
if(j==i)
break;
是为了跳出while(1)循环的吧?

恩,if是一个条件判断语句,成立则输出后面的式子

2007-08-05 01:28
aipb2007
Rank: 8Rank: 8
来 自:CQU
等 级:贵宾
威 望:40
帖 子:2879
专家分:7
注 册:2007-3-18
收藏
得分:0 

那我出个c++版,很久前写的,文曲星上 ?A?B的形式,都玩过吧。
[CODE]#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
void generate(int a[],int size){
srand((unsigned int) time(0));
for (int i = 0;i < size;++i){
int j;
do{
a[i] = rand() % 10;
for (j = i-1;j >= 0;--j){
if (a[i] == a[j])
break;
}
}
while (j >= 0);
}
}

int main(){
const int size = 4;
int random[size];
//get 4 different random numbers
generate(random,size);

int countA,countAB;
//guess the numbers and do process
do{
int temp,guess[size] ={0};
cout << "enter your guess(4 different integer) : ";
cin >> temp;
//make sure the input numbers is valid
if (cin.fail()){
cerr << "invalid input,guess again" << endl;
cin.clear();
cin.ignore();
continue;
}
if (temp > 9999 || temp < 0){
cerr << "invalid input,guess again" << endl;
continue;
}

for (int i = size-1;temp != 0;guess[i--] = temp % 10,temp /= 10);

//make sure the input numbers are different
bool is_same = 0;
for (int i = 0;i < size;++i){
for (int j = i+1;j < size;++j)
if (guess[i] == guess[j])
is_same = 1;
}
if (is_same){
cerr << "invalid input,guess again" << endl;
continue;
}

countA = 0,countAB = 0;
for (int i = 0;i < size;++i){
if (random[i] == guess[i])
++countA;
for (int j = 0;j < size;++j)
if (guess[i] == random[j])
++countAB;
}
cout << countA << "A" << countAB - countA << "B" << endl;
}
while (countA != 4);
cout << "right guess,you win" << endl;
system("pause");
}[/CODE]


[此贴子已经被作者于2007-8-5 12:59:55编辑过]


Fight  to win  or  die...
2007-08-05 11:10
niyoubudou
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2007-8-3
收藏
得分:0 

呵呵!你写的程序考虑的比我全面,你考虑到了猜测的四个数字不能超过9或小于0 and 猜测的四个数字不能一样,如果不符合规则会给予提示.

[此贴子已经被作者于2007-8-5 14:10:19编辑过]


2007-08-05 14:04
快速回复:文曲星上的猜数字游戏,大家指点一下
数据加载中...
 
   



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

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