| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 632 人关注过本帖
标题:再贴一个猜数字游戏。。。
只看楼主 加入收藏
lingluoz
Rank: 2
来 自:苏州科技学院
等 级:新手上路
威 望:4
帖 子:749
专家分:0
注 册:2008-2-2
结帖率:100%
收藏
 问题点数:0 回复次数:3 
再贴一个猜数字游戏。。。
#include <stdlib.h>
#include <time.h>
#include <stdio.h>
#include <string.h>
#include <ctype.h>

typedef struct {
    char a;
    char b;
} _resout;

void create_number(char *lp_num)
{
    int i;
    char num[4];
    srand(time(NULL));
    do {
        for (i=0;i<4;i++)
            num[i]=rand()%10;
    } while ((num[0]==num[1])||(num[0]==num[2])||(num[0]==num[3])||
             (num[1]==num[2])||(num[1]==num[3])||(num[2]==num[3]));
    for (i=0;i<4;i++)
        *(lp_num+i)=num[i];
}

_resout check_number(char *lp_num,char *lp_num_native)
{
    int i,j;
    _resout res={0,0};
    for (i=0;i<4;i++) {
        for (j=0;j<4;j++) {
            if ( *(lp_num+i)==*(lp_num_native+j) ) {
                if (i==j)
                    res.a++;
                else
                    res.b++;
            }
        }
    }
    return res;
}

void input_number(char *lp_num) {
    char buffer[80]; /*输入缓冲区防止用户输入的太多让程序挂掉*/
    int i;
input_origin:
    putchar( '?' );
    gets( buffer );
    if (strlen(buffer)!=4) goto input_origin;
    if ((buffer[0]==buffer[1])||(buffer[0]==buffer[2])||
        (buffer[0]==buffer[3])||(buffer[1]==buffer[2])||
        (buffer[1]==buffer[3])||(buffer[2]==buffer[3]) ) goto input_origin;
    for (i=0;i<4;i++) {
        if (isdigit(buffer[i])==0) goto input_origin;
        *(lp_num+i)=buffer[i]-'0';
    }
}

int main() {
    char num_native[4];
    char num[4];
    int i;
    _resout res;
    create_number(num_native);
    for (i=0;i<10;i++) {
        input_number(num);
        res=check_number(num,num_native);
        if (res.a==4) {
            puts("yes!");
            break;
        }
        printf("A%dB%d\n",res.a,res.b);
    }
    if (i==10) {
        for (i=0;i<4;i++)
            putchar('0'+num_native[i]);
    }
    putchar ('\n');
    return 0;
}
搜索更多相关主题的帖子: 数字 游戏 
2008-06-11 20:14
lingluoz
Rank: 2
来 自:苏州科技学院
等 级:新手上路
威 望:4
帖 子:749
专家分:0
注 册:2008-2-2
收藏
得分:0 
然后是一个反解猜数字的程序
就是在猜数字游戏里面输入这个程序给你的四位数。。然后把结果以axbx的格式输入给这个程序。。重复几次这个程序就会把这个数字解出来了。。
p.s.这个程序的算法很恶心。。大家不要鄙视我哦
/*****************************************


  CaishuZi Conclude CZC v1.0
  
  Copyright (c) 2008 lingluoz

  2008-05-10


******************************************/

#include <stdio.h>
#include <ctype.h>
#include <string.h>

typedef struct {
    char a;
    char b;
} _result;

int is_duplication(char num[4])
{
    int i,j;
    for (i=0;i<4;i++)
        for (j=i+1;j<4;j++)
            if (num[i]==num[j])
                return 1;
    return 0;
}

void create_possible_numbers(char (*lp_possible_numbers)[4])
{
    int i,j,k;
    for (i=0;i<10000;i++) {
        k=i;
        for (j=0;j<4;j++) {
            (*lp_possible_numbers)[j]=k%10;
            k=k/10;
        }
        if (is_duplication((char *)lp_possible_numbers)==0)
            lp_possible_numbers++;  /*只有各个数位上的数不相等的情况下
                                    才inc,这样就等于把有重复数字的数去
                                    掉*/
    }
}

_result check_number(char *lp_num,char *lp_num_native)
{
    int i,j;
    _result res={0,0};
    for (i=0;i<4;i++) {
        for (j=0;j<4;j++) {
            if ( *(lp_num+i)==*(lp_num_native+j) ) {
                if (i==j)
                    res.a++;
                else
                    res.b++;
            }
        }
    }
    return res;
}

int cut_number(char (*possible_numbers)[4],char *lp_num,_result condition)
{
    int i;
    int possible_num_remain=0;
    _result res;
    for (i=0;i<5040;i++) {  
        if ((*(possible_numbers+i))[0]!=-1) {
            res=check_number((char *)(possible_numbers+i),lp_num);
            if ((res.a==condition.a)&&(res.b==condition.b))
                possible_num_remain++;
            else
                (*(possible_numbers+i))[0]=-1; /*不可能的结果就在它的第一位
                                               挂上-1舍去以后就不处理它了*/
        }
    }
    return possible_num_remain;
}

int get_first_possible_number(char (*possible_numbers)[4])
{
    int i=0;
    while((*possible_numbers)[0]==-1) {
        possible_numbers++;
        i++;
    }
    return i;
}

_result input_result()
{
    char buffer[80];
    _result res;
    printf("Enter the result use aXbX :");
input_origin:
    gets(buffer);
    if (strlen(buffer)!=4) goto input_origin;
    if (tolower(buffer[0])!='a') goto input_origin;
    if (tolower(buffer[2])!='b') goto input_origin;
    if (isdigit(buffer[1])==0) goto input_origin;
    if (isdigit(buffer[3])==0) goto input_origin;
    res.a=buffer[1]-'0';
    res.b=buffer[3]-'0';
    if (res.a+res.b>4) goto input_origin;
    return res;
}
   
int main()
{
    char possible_numbers[5040][4];  /* 5040=10A4 */
    char num[4];
    int i,j,num_offset;
    puts("CaishuZi Conclude -CZC v1.0 By lingluoz");
    puts("ok");
    create_possible_numbers(possible_numbers);
    for (i=0;i<10;i++) {
        num_offset=get_first_possible_number(possible_numbers);
        printf("please try this number: ");
        for (j=0;j<4;j++) {
            num[j]=possible_numbers[num_offset][j];
            putchar(num[j]+'0');
        }
        putchar('\n');
        printf("%d possible numbers remains\n",cut_number(possible_numbers,num,input_result()));
    }
    return 0;
}

Murphy's Law :
If there are two or more ways to do something, and one of those ways can result in a catastrophe, then someone will do it.
2008-06-11 20:17
泉此方
Rank: 1
等 级:新手上路
帖 子:89
专家分:0
注 册:2008-6-10
收藏
得分:0 
Orz



" border="0" />[color=white]

#ifdef _LOLICON_
#include"Loli"  //http://
#endif
2008-06-11 20:54
想编好程
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2009-10-17
收藏
得分:0 
拜读了一下,感谢楼主,我们正好要交猜数字的作业,谢了
2009-10-17 16:38
快速回复:再贴一个猜数字游戏。。。
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.034066 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved