人机猜数游戏,么么哒,小妹万分感谢

本人不才,编写的程序太简单,不符合要求,希望大神做一个复杂的,问题是:计算机“想”一个四位数,请人猜这个四位数是多少。人输入这个四位数后,计算机首先判断这四个数中有几个猜对了,并且在猜对的数字中又有几位位置也是对的,将结果显示出来,给人以提示,请人再猜 ,直到人猜出计算机所想的四位数为止。请编程实现该游戏,游戏结束时,显示人猜一个数用了几次。

4位数先随机生成,存放在数组中,然后根据输入的数据先判断正确的数字,再判断位置
可以帮你写一下,不过先采纳一下,等下写完不采纳要哭了,

 #include<stdio.h>
#include <stdlib.h>
#include <time.h> //用到了time函数 
int main(void)
{   
    //存储元数据的数组
    int a[4];
    //以时间为种调用rand()函数生成随机数并赋值
    srand((unsigned) time(NULL));
    for (int i=0;i<4;i++) {
        a[i]=rand()%9;
    //  printf("%d",a[i]);//输出生成的随机数,测试用
        }
    printf("请开始猜吧\n");

    //存储输入数据的数组
    int b[4];       

    //猜测字数的计数器
    static int count=0; 

    for(int j=0;j<4;j++){
        scanf("%d",&b[j]);

    }
    count+=1;


    //while循环控制变量,控制跳出循环
    int control=1;  


    while(control){
        int c=0;        
        //是否全部猜对检测
        for(int i=0;i<4;i++){
            if(a[i]==b[i]){
                c+=1;
                printf("第%d个数猜对了,其值为%d\n",i+1,a[i]);
            }
            if(c==4){
            printf("恭喜你猜对了,你总共猜了%d次",count);
        //直接跳出外层循环
            control=0;  
            }
        }

        //检测数组b中的数是否为猜测数组中有的数
        for(int k1=0;k1<4;k1++){

            for(int i=0;i<4;i++){
                if(i==k1){
                    continue;
                }
                if(b[k1]==a[i]){
                printf("%d是其中的数\n",b[k1]);
                }
            }
        }


        //猜测不成功再猜
        for(int j=0;j<4;j++){
            scanf("%d",&b[j]);

        }count+=1;
    }   
    return 0;
}


测试图
图片说明
图片说明

第十一行a[i]=rand()%9;
取余时,rand()%改变后面的数字就可以调整随机数的范围,加大难度

 1、人机猜数游戏
由计算机“想”一个四位数,请人猜这个四位数是多少。人输入这个四位数后,计算机首先判断这四个数中有几个猜对了,并且在猜对的数字中又有几位位置也是对的,将结果显示出来,给人以提示,请人再猜 ,直到人猜出计算机所想的四位数为止。请编程实现该游戏,游戏结束时,显示人猜一个数用了几次。
提示:用库函数random()产生一个随机数。

//没想到什么简单方法,就用笨方法做吧。
 #include<stdio.h>
 #include<stdlib.h>
 #include<time.h> 
 int main()
 {
     int m,x;
    /* 用0调用时间函数time(),将其返回值强制转换为unsigned型,作为参数来调用srand( )函数。
  srand( )是为rand( )函数初始化随机发生器的启动状态,以产生伪随机数,所以常把srand( )称
  为种子函数。用time()返回的时间值做种子的原因是time()返回的是实时时间值,
  每时毎刻都在变化,这样产生的伪随机数就有以假乱真的效果。 */
     srand((unsigned)time(0));
     m=rand()%10000+1;         //产生一个随机数。

  printf("随机发生器随机一个四位数\n"); 
     printf("%d\n",m);        //输入一个四位数m。 
    printf("****************************\n");
     int a[4],b[4];           //a[4]数组存放m的每一位。 
     a[0]=m%10;
     a[1]=m/10%10;
     a[2]=m/100%10;
     a[3]=m/1000;
     int i,k,t;
     for(t=0;;t++)
  {
      int c[4]={1,1,1,1};
     printf("您猜的四位数是:\n"); 
     scanf("%d",&x);          //输入要猜的四位数x。

     b[0]=x%10;               //b[4]数组存放x的每一位。 
     b[1]=x/10%10;
     b[2]=x/100%10;
     b[3]=x/1000;
     int count,j;
     /*************判断相同的数的个数**********/ 
     for(i=0,count=0; i<=3; i++)
  {
      for(j=0; j<=3; j++)
   {
       if(b[j]==a[i]&&c[j])
    {
        count++;
        c[j]=0;
        break;
       }
      }
     } 
     printf("%d ",count);         //count指相同的数的个数。 
    /*************判断相同位置的数的个数**********/ 
     for(i=0,k=0; i<=3; i++)
  {     //k指相同位置上的一致的数的个数 
      if(a[i]==b[i])
      k++;
     }
     printf("%d\n",k);           //k为位置相同的数。 

  if(k==4)
  {
  printf("恭喜您!!!结果正确!!\n"); 
  printf("****************************");
  break;
  }            //k为4时,猜对了。 

     }
     return 0;
}
/* rand(产生随机数) 
相关函数 srand() 
表头文件 #include<stdlib.h> 
定义函数 int rand(void) 
函数说明 rand()会返回一随机数值,范围在0至RAND_MAX 间。
在调用此函数产生随机数前,必须先利用srand()设好随机数种子。 
如果未设随机数种子,rand()在调用时会自动设随机数种子为1。
关于随机数种子请参考srand()。 */ 

这有一个复杂点的,