用C语言编写猜数字(喜欢挑战的人可以来看看哦)
发布网友
发布时间:2022-08-18 14:23
我来回答
共3个回答
热心网友
时间:2023-11-01 05:59
// 猜数字.cpp : Defines the entry point for the console application.
//
#include <stdafx.h>
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
//随机生成4位数,要求没有重复数字
void ProceRandomNumber(int data[4])
{
int z;
/*随机选取1-9999的数,放弃1-999的数,选择1000-9999的数*/
do
{
srand( (unsigned)time( NULL ) );
z=(rand()%100)*(rand()%100);/*随机选数*/
data[3]=z%10;/*把随即数分成4个*/
data[2]=z/10%10;
data[1]=z/100%10;
data[0]=z/1000%10;
}while(z<1000||data[0]==data[1]||data[0]==data[2]||data[0]==data[3]||data[1]==data[2]||data[1]==data[3]||data
[2]==data[3]||data[0]==0);/*判断每一位数是否相同,如果是则重新输出*/
return ;
}
void Indata(int number,int data[4])
{
data[0]=number/1000%10;
data[1]=number/100%10;
data[2]=number/10%10;
data[3]=number%10;
}
int PosRight(int question[4],int answer[4])
{
int i,count=0;
for(i=0;i<=3;i++)
{
if(question[i]==answer[i])
{
count++;
}
}
return count;
}
int NumRight(int question[4],int answer[4])
{
int i,j,count=0;
for(i=0;i<=3;i++)
{
for(j=0;j<=3;j++)
{
if((question[i]==answer[j])&&(i!=j))
{
count++;
}
}
}
return count;
}
int main(int argc, char* argv[])
{
int answer,count=0,input[4],output[4],m=0,n=0,choice;
ProceRandomNumber(input);
printf(" 欢迎来玩猜数字游戏!\n 游戏开始啦!!!\n");
do
{
count++;
scanf("%d",&answer);
Indata(answer,output);
m=PosRight(input,output);
n=NumRight(input,output);
if(m==4)
{
printf("你真棒!!!\n这个数字就是%d%d%d%d\n你一共猜了%d次了!\n",input[0],input[1],input[2],input[3],count);
break;
}
else
{
printf("不好意思你错了哦!! 提示: %dA%dB\n",m,n);
}
if(count==8)
{
printf("你已经猜了八次了!还要继续吗?(1:yes/0:false)\n");
scanf("%d",&choice);
if(choice==1)
printf("继续吧!\n");
else
{printf("结束游戏!\n");
break;}
}
else if(count==15)
{
printf("你已经猜了15 次了,可能方法不对!下次继续吧!!!\n");
break;
}
}while(1);
return 0;
}
热心网友
时间:2023-11-01 06:00
/*
********************************************************************************
**
** 文 件 名: GUESS.C
**
** 文件描述: 猜数字游戏
**
** 版 本: 1.0.0
**
** 创 建 人:
**
** 单 位:
**
** 最后修改: 2010年6月18日
**
** 备 注:
**
********************************************************************************
*/
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
int GetRandomStr(char RandomStr[5])
{
int i;
int j;
int k;
i=0;
while(i<4)
{
k=random(10);
if( ! (k || i) )
continue;
k=k+'0';
for(j=0;j<i;j++)
{
if( k==RandomStr[j] )
{
k=0;
break;
}
}
if(!k)
continue;
RandomStr[i]=k;
i++;
}
RandomStr[4]=0x0;
}
int Compare(char RandomStr[5],int k,int *m, int *n)
{
int i;
int j;
char c;
*m=0;
*n=0;
i=0;
for(i=0;i<4;i++)
{
c=(k%10)+'0';
k=(int)(k/10);
for(j=0;j<4;j++)
{
if( c==RandomStr[j] )
if ( 3-i ==j)
(*m)++;
else
(*n)++;
}
}
return (*m);
}
int Exit(int Cn)
{
char c;
printf("Yun have guess %d times,continue?(1:yes/0:no):",Cn);
while(1)
{
c=getch();
printf("%c\n",c);
if ( c=='1' )
return 1;
else if ( c == '0')
return 0;
else
{
printf("nonlicet input,plase again\n");
printf("Yun have guess 8 times,continue?(1:yes/0:no):\n");
}
}
}
int main()
{
char RandomStr[5]; /* 随机数(4个字符) */
unsigned int k; /* 随机数(4位整数) */
int m; /* 位置正确的数字个数 */
int n; /* 数字正确而位置不对的数的个数 */
int Cn; /* 次数 */
char Mask[]="%dA%dB\n"; /* 显示格式 */
const char MessageS[5][50]={
""};
randomize();
GetRandomStr(RandomStr);
/* printf("Random number in the 0-99 range: %s\n", RandomStr); */
Cn=1;
while(1)
{
printf("Enter number(4):");
scanf("%u",&k);
/*printf("you enter:%d\n",k); */
if(k<1000 || k>9999)
{ printf("number error!\n");
continue;
}
if( Compare(RandomStr,k,&m,&n)==4 )
{
printf("You are best,this number is %d,you have guess %d times\n",k,Cn);
break;
}
printf(Mask,m,n);
if ( Cn == 8 )
{
if ( Exit(Cn) == 0)
break;
}
if ( Cn == 15)
{
printf("You have guess %d times,pig!\n",Cn);
getch();
break;
}
Cn++;
}
getch();
}
热心网友
时间:2023-11-01 06:00
tzol