宾果游戏C语言 怎么做啊

我的解答思路和尝试过的方法
我想要1. 程序生成一个各个数位不重复的4位整数
  1. 用户从屏幕上输入一个各个数位不重复的4位数字:如果不符合规范(位数不足,有重复数位等)不计入猜测次数,要求用户重新输入。
    
  2. 根据用户输入的数字,显示用户输入的数字与程序生成的数字有几位相同。如果数字相同,位置也相同,记作A;如果数字相同但位置不同记作B。如果用户没有完全猜中,显示xAyB,猜测次数+1,要求用户输入下一个数字;如果用户完全猜中,则显示“BINGO! You use N times!”(显示N)。

例:后台生成的数字为1357

第一次输入1234,提示1A1B

第二次输入5678,提示0A2B

第三次输入1752,提示2A1B

第四次输入1357,提示 BINGO! You use 4 times!达到的结果

用随机数生成4位数,判断是否有重复数字,有则重新生成
将用户输入4位数逐个与随机数比较,如果在随机数中,则判断位置是否相同,相同则记为A,不同则记为B,最后统计A,B的数量。

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

int check(int n)
{
    int a[10] = {0};
    int i=0;
    if(n<123 || n>9876)
        return 0;
    for(i=0;i<4;i++)
    {
        a[n%10]++;
        n = n/10;
    }
    for(i=0;i<10;i++)
        if(a[i] > 1)
            return 0;
    return 1;
}

int getData()
{
    int n = rand()%9754+123;
    while(1)
    {
        if(check(n) == 1)
            break;
        else
            n = rand()%9754+123;
    }
    return n;
}

void int2char(int n,char r[4])
{
    for(int i=0;i<4;i++)
    {
        r[i] = n%10;
        n = n/10;
    }
}

int main()
{
    int n,m,num,i,j;
    char a[4] = {0},b[4] = {0};
    int nA = 0,nB = 0;
    srand(time(NULL));
    num=1;
    n = getData();
    while(1)
    {
        nA = nB = 0;
        printf("请输入不重复的四位数: ");
        scanf("%d",&m);
        if(check(m) == 0)
        {
            printf("数字不对,重新输入。\n");
            continue;
        }
        if(n==m)
        {
            printf("BINGO! You use %d times!",num);
            break;
        }
        int2char(n,a);
        int2char(m,b);
        for(i=0;i<4;i++)
        {
            for(j=0;j<4;j++)
            {
                if(a[i] == b[j])
                {
                    if(i==j)
                        nA++;
                    else
                        nB++;
                }
            }
        }
        printf("%dA%dB\n",nA,nB);
    }
    return 0;
}

#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include <math.h>
void rand_num(int v[]);
void main()
{
int math[4],guess[4];int result[4]; //math用来装产生的随机的4位数,guess用来装玩家猜的4位数,result用来放映匹配的结果
int i,j,n=0,b,a,d;//n用来标志是否还有竞猜的机会,b位玩家输入的4位数
int c;//用于检验每一位都配对正确
rand_num(math);//装数字不相同的4个数进入math
printf("竞猜不同数字的4位数开始!(共10次机会)\n");
while(n!=10){
scanf("%d",&b);//玩家输入猜的4位数
d=1;
while(d){
for(i=0;i<4;i++){//把4位数的每一位装入guess中
guess[i]=(b%(int)pow(10,4-i))/(int)pow(10,3-i);
}
d=0;
for(i=0;i<4;i++){
a=guess[i];
if(a==guess[i-1]||a==guess[i-2]||a==guess[i-3]){
d=1;
}
}
if(b>9876||b<0123){//如果输入的不是4位数,重新输入
d=1;
}
if(d){
printf("请输入不同数字的4位数\n");
scanf("%d",&b);//玩家输入猜的4位数
}
}
for(i=0;i<4;i++){//初始化result
result[i]=0;
}
for(i=0;i<4;i++){ //系统对输入的数与抽到的数进行匹配。并装放映结果入result中
for(j=0;j<4;j++){
if (guess[i]==math[i]){
result[i]='A';
break;
}
else if (guess[i]==math[j]){//扫描guess中的每一位的数是否有与math某一位相同的数
result[i]='B';
break;
}
else result[i]='*';
}
}
printf("匹配结果提示如下:");
for(i=0;i<4;i++){//显示配对结果。
printf("%c",result[i]);
}
printf("\n");
c=0;//初始化C。不然的话之前c可能为1、 2、 3
for(i=0;i<4;i++){//如果匹配完全正确,退出竞猜循环
if(result[i]=='A'){
c++;
}
}
if(c==4){
n=10;
}
else {
n++;
printf("错误!请重新竞猜\n");
}
}
printf("系统随机抽到的4位数结果如下:\n");
for(i=0;i<4;i++){ //输出随机的4位数
printf("%d",math[i]);
}
printf("\n");
}
//产生数字不相同的4位数
void rand_num(int v[])//产生数字不相同的4位数
{
int a,i; //用来装暂时产生的随机数的个位数
srand((unsigned)time(0));
for(i=0;i<4;i++){ //给4个位装随机值
a=rand()%10;
while(a==v[i-1]||a==v[i-2]||a==v[i-3]){//数组下标是负数的话就是上一个单元的值。一般不是个位数
a=rand()%10;
}
v[i]=a;//产生随机数,取其个位数
}
}

#include <iostream>
#include <cstdlib>
#include <ctime>
#include <algorithm>

#define num 4
 
using namespace std;
 
int nums[num];



int main() {
    srand((unsigned)time(NULL));
     
    for (int i=0;i<num;++i){
        int t=rand()%10;
        while(find(nums,nums+num,t)!=nums+num){
            t=rand()%10;
        }
         nums[i]=t;
    }
    cout<<"开始输入:\n";
    for (int times=1;;++times){
        string str;
        cin>>str;
        int A=0,B=0;
        if (str.length()!=num){
            cout<<"输入不合法:长度不正确"<<endl;
            times--;
            continue;
        }
        int inputs[num];
        bool flag=true;
        for (int j=0;j<num;++j){
            if (find(inputs,inputs+j,str[j]-'0')!=inputs+j){
                cout<<"输入不合法:有重复值"<<endl;
                times--;
                flag=false;
                break;
            }
            inputs[j]=str[j]-'0';
            int* res=find(nums,nums+num,inputs[j]);
            if (res!=nums+num){
                if (res == nums+j){
                    A+=1;
                }else{
                    B+=1;
                }
            }
        }
        if (!flag) continue;
        if (A == num){
            cout<<"BINGO! You use "<<times<<" times!"<<endl;
            break;
        }else{
            cout<<A<<"A"<<B<<"B"<<endl;
        }
    }
    
 
    return 0;
 
}

望采纳!