2010年6月6日 星期日

猜數字遊戲,幾A幾B的那種《結構版》

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

struct checkup{
   char used;
   char pos;
};
struct numeric_rec{
   char a;
   char b;
};
typedef struct checkup nchk;
typedef struct numeric_rec nr;
int is_in(char *a,int n);
int main()
{
    int i,num=4;
    char *ans=NULL,*usr=NULL,tmp;
    nr col={0,0};
    nchk chk[10]={{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].used=1;
    chk[tmp].pos=0;
    for(i=1;i<num;i++){
        do{
           tmp=rand()%10;
        }while(chk[tmp].used==1);
        ans[i]=48+tmp;
        chk[tmp].used=1;
        chk[tmp].pos=i;
    }
    usr=(char *)malloc(sizeof(char)*(num+1));
    printf("%d位數\n",num);
    do{
        col.a=0;
        col.b=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].used==1){
               if(chk[tmp].pos==i){
                   col.a++;
                   printf("[%c]",usr[i]);
               }else{
                   col.b++;
                   printf("%c",usr[i]);
               }
           }else{
               printf("%c",usr[i]);
           }
        }
        printf(" (%dA%dB)\n",col.a,col.b);
    }while(col.a!=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;
}

沒有留言:

張貼留言