Loading

moectf:A_game

说一下里面关于算法的一些内容吧:

行检索:

固定j的值为一到九的一个数,去和box里的一行进行比对,全部比对完成都没有到break那一步(k==8)输出错误,跳出整个程序

    int j;
    for(int i=0;i<9;i++){
        for(int k=1;k<10;k++){
            j=0;
            while (box[i][j] != k){
                if(j==8){
                    printf("Wrong!!!Try again!!!");
                    system("pause");
                    exit(0);
                }
                j++;
            }

        }
    }
}

列检索

和行检索相似

void check2(){
    int i;
    for(int j=0;j<9;j++){
        for(int k=1;k<10;k++){
            i=0;
            while (box[i][j] != k){
                if(i==8){
                    printf("Wrong!!!Try again!!!");
                    system("pause");
                    exit(0);
                }
                i++;
            }
            
        }
    }
}

九宫格检索

数独中除了需要保证行和列都是九个不同的数,还需要保证九宫格的不同

https://sudokusolving.bmcx.com/

在这个算法中,j和i仅用于跳转于不同的九宫格中,k用于判断九个数的不同,真正用于在九宫格走的是v5和v4(其实可以说是v4自己),当碰撞到九宫格边缘(2,2)时,还没有跳出,那就直接跳出整个程序

void check3(){
    int i,j,k;
    for(int x=0;x<9;x+=3){
        for(int y=0;y<9;y+=3){
            for(k=1;k<10;k++){
                i=0;
                j=0;
                while(box[x+i][y+j] != k){
                    if(i==2 && j==2){
                    printf("Wrong!!!Try again!!!");
                    system("pause");
                    exit(0);
                    }
                    j++;
                    if(j==3){
                        i++;
                        j=0;
                    }
                }
            }
        }
    }
}

数独的填入

当遇见0时开始填入,由于输入的值是字符出串,为了保证后面计算顺利,需要改成字符(两个字符之间的距离)
所以我们需要找到数独结果(由于需要保证只有49个数,所以我们只需要输入0的内容)
用数独求解器输出结果

a=b"8291767138932581849755263447186268341129653538127"

magic=[
    107, 2, 102, 112, 68, 105, 126, 110, 67, 74,
    120, 74, 109, 96, 86, 0, 81, 89, 80, 67,
    80, 81, 109, 116, 2, 85, 80, 82, 110, 111,
    121, 64, 93, 75, 30, 25, 28, 116, 3, 84,
    7, 76, 82, 106, 96, 80, 88, 64, 88, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0
]
for i in range(len(a)):
    print(chr(a[i]^magic[i]),end="")
#moectf{S0_As_I_prAy_Un1imited_B1ade_WOrks---E1m1ya_Shir
posted @ 2025-04-07 19:32  huidu01  阅读(23)  评论(0)    收藏  举报
; ;