首页 > 其他 > 详细

Chapter4珠玑妙算

时间:2018-01-25 22:49:54      阅读:232      评论:0      收藏:0      [点我收藏+]
//4-3把读到的字符串形式的整数转换为数值显示
#include<stdio.h>
#include<stdlib.h>
int main(){
    char temp[20];
    printf("请输入整数:");
    scanf("%s", temp);
    printf("你输入了%d。\n", atoi(temp));
    return 0;
}
//4-6珠玑妙算
#include<time.h>
#include<ctype.h>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
//生成4个不同数组的组合并存入数组x
void make4digits(int x[]){
    int i, j, val;
    for(i = 0; i < 4; i++){
        do{
            val = rand() % 10;
            for(j = 0; j < i; j++)
                if(val == x[j])
                    break;
        }while(j < i);        //只有不相同j才会等于i
        x[i] = val;
    }
}
//检查已输入的字符串s的有效性
int check(const char s[]){
    int i, j;
    if(strlen(s) != 4)
        return 1;    //错误码1, 字符串长度不为4
    for(i = 0; i < 4; i++){
        if(!isdigit(s[i]))
            return 2;    
        for(j = 0; j < i; j++)
            if(s[i] == s[j])
                return 3;
    }
    return 0;    //字符串有效
}
//hit和blow的判断
void judge(const char s[], const int no[], int *hit, int *blow){
    int i, j;
    *hit = *blow = 0;
    for(i = 0; i < 4; i++){
        for(j = 0; j < 4; j++){
            if(s[i] == 0 + no[j])        //数字一致
                if(i == j)
                    (*hit)++;    //位置一致
                else
                    (*blow)++;    //位置不一致
        }
    }
}
//显示判断结果
void print_result(int snum, int spos){
    if(spos == 4)
        printf("回答正确!!");
    else if(snum == 0)
        printf("    这些数字里没有答案数字。\n");
    else{
        printf("    这些数字里包括%d个答案数字。\n", snum);
        if(spos == 0)
            printf("    但是数字的位置都不一致。\n");
        else
            printf("    其中有%d个数字的位置都是一致的。\n", spos);
    }
    putchar(\n);
}
int main(){
    int try_no = 0;    //输入次数
    int chk;        //已输入的字符串的检查结果
    int hit;
    int blow;
    int no[4];        //要猜的数字串
    char buff[10];    //用于存放读取数字串的字符串
    clock_t start, end;
    
    srand(time(NULL));
    puts("* 来玩珠玑妙算吧。");
    puts("* 请猜4个数字");
    puts("* 其中不包含相同的数字。");
    puts("* 请像4307这样连续输入数字。");
    puts("* 不能输入空格字符。\n");
    
    make4digits(no);
    start = clock();
    do{
        do{
            printf("请输入:");
            scanf("%s", buff);
            
            chk = check(buff);
            switch(chk){
                case 1: puts("\a请确保输入4个字符"); break;
                case 2: puts("\a请不要输入除了数字以外的字符"); break;
                case 3: puts("\a请不要输入相同的数字"); break;
            }
        }while(chk != 0);
        
        try_no++;
        judge(buff, no, &hit, &blow);
        print_result(blow + hit, hit);
    }while(hit < 4);
    end = clock();
    printf("用了%d次。\n用时%.1f秒。\n", try_no, (double)(end - start) / CLOCKS_PER_SEC);
    return 0;
}

 

Chapter4珠玑妙算

原文:https://www.cnblogs.com/leosirius/p/8353388.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!