【原创】数独C语言全解-连载3部分代码展示1/3

 

1、初始输入部分

关于初始输入部分,为了简便输入,结合数独的特点,采用3位数连续输入的方式来初始输入,比如,输入123表示第1行第2列的初始值为3,输入798表示第7行第9列的初始值为8。如果输入错误了,要进行清除,则采用初始值置0的方式来处理。

同时对错误的输入进行简单甄别(完全的甄别错误输入,是一个比较麻烦的事情,不做完整处理)。

代码如下:

//初始输入  

   bool blinitfail=true;
    //输入初始值 
    do{
        int x=0,y=0,i=0,j=0,k=0;
   printf("初始值输入说明:\n输入三位数,分别表示行数、列数,初始值,最后回车结束:\n");
    printf("如输入'123',表示第1行第2列的初始数值为3\n");
    printf("如需删除已设置初始值,可将该处设置为0值。如'130'表示将第1行第3列初始值删除\n");
    printf("如果输入初始值结束,请输入(100)\n");
    while(1){        
        scanf("%d",&j);
        
        if(j==100){
            printf("初始值输入结束!以下列出已设置内容\n\n");
            prtsdk(sdk);
            printf("是否需要更改,如需更改,请输入0,其他字符则自动验证数独,无误后开始解题\n");
            scanf("%d",&k);
            if(k!=0)break;else {
                printf("现在可以继续录入初始值\n要删除初始值可设置该处为0\n");
                continue;
            }
        }
        x=j/100;
        y=(j%100)/10;
        i=j%10;
        if((x<10)&&(x>0)&&(y<10)&(y>0)&&(i<10)&&(i>=0)){
            sdk[x-1][y-1]=i;
            if(i==0)printf("已经清除(%d,%d)处的初始值\n",x,y);
            else printf("已设置(%d,%d)=%d\n\n",x,y,sdk[x-1][y-1]);    
        }else{
            printf("\n数据不符合要求,本次未设置初始值。\n");
        }
        printf("继续输入初始值或结束(输入100)\n");
    }
    
    //验证初始值是否满足要求
    bool blt=false;
    blt=chkinit(0,sdk);
    if(blt==true){
        blinitfail=true;
        printf("初始数独有误,重置全部为0\n\n");
        for(i=0;i<9;i++){
            for(j=0;j<9;j++){
                sdk[i][j]=0;
            }
        }
        
        printf("请重新输入初始数据\n");
    }else{
        printf("初始值验证通过,需解题数独为\n");
        prtsdk(sdk);
        blinitfail=false;
    }
    //prtsdk(sdk);
    blt=false;//恢复blt 

    }while(blinitfail);
    //初始值输入结束

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值