2010年6月6日 星期日

猜數字遊戲,幾A幾B的那種《陣列版》

#include <stdlib.h>
#include <stdio.h>
#include <time.h>
int is_in(char *a,int n);
int main()
{
    int i,num=4;
    char *ans=NULL,*usr=NULL,tmp,col[2]={0,0};
    char chk[10][2]={{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}};
    long tt;
    srand(time(&tt)%60);
    ans=(char *)malloc(sizeof(char)*num);
    tmp=rand()%10;
    ans[0]=48+tmp;
    chk[tmp][0]=1;
    chk[tmp][1]=0;
    for(i=1;i<num;i++){
        do{
           tmp=rand()%10;
        }while(chk[tmp][0]==1);
        ans[i]=48+tmp;
        chk[tmp][0]=1;
        chk[tmp][1]=i;
    }
    usr=(char *)malloc(sizeof(char)*(num+1));
    printf("%d位數\n",num);
    do{
        col[0]=0;
        col[1]=0;
        printf("猜:");
        scanf("%s",usr);
        if(is_in(usr,num)){
           printf("數字不可重覆!\n");
           continue;
        }
        printf("\n結果:");
        for(i=0;i<num;i++){
           tmp=usr[i]-48;
           if(chk[tmp][0]==1){
               if(chk[tmp][1]==i){
                   col[0]++;
                   printf("[%c]",usr[i]);
               }else{
                   col[1]++;
                   printf("%c",usr[i]);
               }
           }else{
               printf("%c",usr[i]);
           }
        }
        printf(" (%dA%dB)\n",col[0],col[1]);
    }while(col[0]!=num);
    system("pause");
    return 0; 
}
int is_in(char *a,int n){
   char chk[10]={0,0,0,0,0,0,0,0,0,0};
   int i,tmp;
   for(i=0;i<n;i++){
      tmp=a[i]-48;
      if(chk[tmp]!=1){
          chk[tmp]=1;
      }else{
          return 1;
      }
   }
   return 0;
}

沒有留言:

張貼留言