这个程序怎么写
输入两个四位数,其中任一个数的各位上的数字都不一样,问,这两个数对应位上的数一样的有多少个,用A表示,数字一样但位置不同的又有多少个,用B表示
如1234 1352
就是1A2B
这个程序怎么写比较简单?
----------------解决方案--------------------------------------------------------
很遗憾,我很久前写的猜数字游戏找不到了。。
----------------解决方案--------------------------------------------------------
核心大概是这个样子
假设你已经把4位数保存在数字a[4],b[4]中
程序代码:
A=B=0;
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
{
if(a[i]==b[j])
{
B++;
if(i==j)
A++;
}
}
}
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
{
if(a[i]==b[j])
{
B++;
if(i==j)
A++;
}
}
}
----------------解决方案--------------------------------------------------------
......................
----------------解决方案--------------------------------------------------------
给你一个没完成的代码(同学等我吃饭 不能不去 所以没写完)
----------------解决方案--------------------------------------------------------
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<conio.h>
#define NUM_LEN 4
#define ESC 27
#define BACK 8
typedef struct
{
int A ;
int B ;
} NumRightAB;
enum level{easy = 30, normal = 20, hard = 10, esc = 0} gameLevel;
int init(void) ;
level startChoose(void) ;
void initNum(int num[]) ;
void inputNum(int num[]) ;
NumRightAB checkNum(int inNum[], int num[]) ;
int outReslut(NumRightAB reslut) ;
int outWin(void) ;
int outLose(void) ;
int main(void)
{
int num[4] = {0} ;
int inNum[4] = {0} ;
NumRightAB reslut ;
int gameCount ;
init() ;
initNum(num) ;
if(!(gameLevel = startChoose()))
{
printf("游戏结束!") ;
return 1 ;
}
else
{
system("cls") ;
printf("\t猜数字游戏\n") ;
printf("数字长度:%d/t最多机会:%d\n", NUM_LEN, gameLevel) ;
gameCount = gameLevel ;
}
do
{
inputNum(inNum) ;
reslut = checkNum(inNum, num) ;
outReslut(reslut) ;
gameCount-- ;
}while(reslut.A != NUM_LEN && gameCount) ;
if(gameCount)
{
outWin() ;
}
else
{
outLose() ;
}
return 0 ;
}
//init()函数
//说明:对整个游戏进行图像和随机开始点等设置进行初始化
int init(void)
{
srand(time(NULL)) ;
system("cls") ;
return 0 ;
}
//startChoose()函数
//说明:选择游戏难度 1,2,3选择难度 4和ESC退出整个游戏
level startChoose(void)
{
while(1)
{
system("cls") ;
printf("\t猜数字游戏\n") ;
printf("请选择游戏难度\n1。简单\n2。正常\n3.困难\n") ;
switch(getch())
{
case '1':
return easy ;
case '2':
return normal ;
case '3':
return hard ;
case '4':
case ESC:
return esc ;
default:printf("输入有误!请按照正确要求输入!") ;
}
}
}
//initNum()函数
//说明:对游戏目标数组num进行初始化
void initNum(int num[])
{
int i ;
for(i = 0;i < NUM_LEN;i++)
{
num[i] = rand()%10 ;
}
}
//inputNum()函数
//说明:等待用户输入猜测数组
void inputNum(int inNum[])
{
int i ;
char tchar = 0, ch = 0 ;
char numChar[NUM_LEN] = "" ;
for(i = 0;i < NUM_LEN;)
{
ch = getch() ;
//确定输入的数字为0~9
//0~9的ASCII码为 48~57 (ASC(0~9)+2)/ 10的值为 5
tchar = (ch+2)/10 ;
switch(tchar)
{
case 5:
putchar(ch) ;
inNum[i] = ch-'0' ;
numChar[i] = ch ;
i++ ;
break ;
case BACK:
numChar[i] = 0 ;
i-- ;
printf("\r%s", numChar) ;
break ;
default:break ;
}
}
}
//checkNum()函数
//说明:对输入的数组和目标数组进行对比 返回对比结果
NumRightAB checkNum(int inNum[], int num[])
{
NumRightAB reslut = {0,0} ;
printf("\n%dA%dB\n", reslut.A, reslut.B) ;
return reslut ;
}
//outReslut()函数
//说明:输出对比结果
int outReslut(NumRightAB reslut)
{
return 0 ;
}
//outWin()函数
//说明:胜利事件
int outWin(void)
{
return 0 ;
}
//outLose()函数
//说明:失败事件
int outLose(void)
{
return 0 ;
}
----------------解决方案--------------------------------------------------------
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<conio.h>
#define NUM_LEN 4
#define ESC 27
#define BACK 8
typedef struct
{
int A ;
int B ;
} NumRightAB;
enum level{easy = 30, normal = 20, hard = 10, esc = 0} gameLevel;
int init(void) ;
level startChoose(void) ;
void initNum(int num[]) ;
void inputNum(int num[]) ;
void checkNum(int inNum[], int num[], NumRightAB *reslut) ;
void outReslut(NumRightAB reslut) ;
void outWin(int gameCount) ;
void outLose(int num[]) ;
int main(void)
{
int num[4] = {0} ;
int inNum[4] = {0} ;
NumRightAB reslut = {0, 0};
int gameCount ;
init() ;
initNum(num) ;
if(!(gameLevel = startChoose()))
{
printf("游戏结束!") ;
return 1 ;
}
else
{
system("cls") ;
printf("\t猜数字游戏\n") ;
printf("数字长度:%d/t最多机会:%d\n", NUM_LEN, gameLevel) ;
gameCount = gameLevel ;
}
do
{
inputNum(inNum) ;
checkNum(inNum, num, &reslut) ;
outReslut(reslut) ;
gameCount-- ;
}while(reslut.A != NUM_LEN && gameCount) ;
if(gameCount)
{
outWin(gameCount) ;
}
else
{
outLose(num) ;
}
return 0 ;
}
//init()函数
//说明:对整个游戏进行图像和随机开始点等设置进行初始化
int init(void)
{
srand(time(NULL)) ;
system("cls") ;
return 1 ;
}
//startChoose()函数
//说明:选择游戏难度 1,2,3选择难度 4和ESC退出整个游戏
level startChoose(void)
{
while(1)
{
system("cls") ;
printf("\t猜数字游戏\n") ;
printf("请选择游戏难度\n1。简单\n2。正常\n3。困难\n") ;
switch(getch())
{
case '1':
return easy ;
case '2':
return normal ;
case '3':
return hard ;
case '4':
case ESC:
return esc ;
default:printf("输入有误!请按照正确要求输入!") ;
}
}
}
//initNum()函数
//说明:对游戏目标数组num进行初始化
void initNum(int num[])
{
int i ;
int tNum[10] = {0} ;
for(i = 0;i < NUM_LEN;i++)
{
if(!tNum[i])
{
num[i] = rand()%10 ;
tNum[num[i]] = 1 ;
}
}
}
//inputNum()函数
//说明:等待用户输入猜测数组
void inputNum(int inNum[])
{
int i ;
char tchar = 0, ch = 0 ;
char numChar[NUM_LEN] = "" ;
for(i = 0;i < NUM_LEN;)
{
ch = getch() ;
//确定输入的数字为0~9
//0~9的ASCII码为 48~57 (ASC(0~9)+2)/ 10的值为 5
tchar = (ch+2)/10 ;
if(tchar == 5)
{
putchar(ch) ;
inNum[i] = ch-'0' ;
numChar[i] = ch ;
i++ ;
}
switch(ch)
{
case BACK:
i-- ;
numChar[i] = 0 ;
printf("\r%s", numChar) ;
break ;
default:break ;
}
}
}
//checkNum()函数
//说明:对输入的数组和目标数组进行对比 返回对比结果
void checkNum(int inNum[], int num[], NumRightAB *reslut)
{
int i, j ;
reslut->A = 0 ;
reslut->B = 0 ;
for(i = 0;i < NUM_LEN;i++)
{
for(j = 0;j < NUM_LEN;j++)
{
if(inNum[i] == num[j])
{
reslut->B ++ ;
break ;
}
}
if(inNum[i] == num[i])
{
reslut->A ++ ;
}
}
}
//outReslut()函数
//说明:输出对比结果
void outReslut(NumRightAB reslut)
{
printf("\n%dA%dB\n", reslut.A, reslut.B) ;
}
//outWin()函数
//说明:胜利事件
void outWin(int gameCount)
{
printf("恭喜你猜对这%d个数\n", NUM_LEN) ;
printf("你用了%d步机会!\n", gameCount) ;
}
//outLose()函数
//说明:失败事件
void outLose(int num[])
{
int i ;
printf("你输掉了这次机会!") ;
for(i = 0;i < NUM_LEN;i++)
printf("答案:%d\n", num[i]) ;
}
----------------解决方案--------------------------------------------------------
顶顶顶顶顶顶
顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶 ----------------解决方案--------------------------------------------------------