首页
社区
课程
招聘
[原创]题目二我的算法
2021-5-12 14:18 3788

[原创]题目二我的算法

2021-5-12 14:18
3788
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <String.h>
int findindex(char s)
{
    char* sourc = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    int index = 0;
    for (int i = 0; i < strlen(sourc); i++)
    {
        if (s == sourc[i])
        {
            return index;
        }
        index++;
    }
    return -1;
}

struct TreeNode
{
    int ta;
    int tb;
    char* as_l;
};

char as_1[90] = {
    'S',0,1,0,0,1,0,0,1,1,
    1,1,0,0,1,0,0,1,0,0,
    0,0,1,0,1,1,1,1,1,0,
    0,1,1,0,1,0,0,1,0,0,
    0,0,1,0,0,1,0,0,1,1,
    1,1,0,1,1,1,0,1,0,1,
    0,0,1,1,1,1,0,1,0,1,
    0,1,1,0,0,1,0,1,0,1,
    0,0,0,1,0,0,1,1,0,0
};



char getresult(char test,int *a,int* b, char* as,int indexstr)
{
    int a1 = 0;
    int flag = 0;
    int old_a = *a, old_b = *b;
    int changindex = -1;
    int index = findindex(test);
    int ina1 = (indexstr + index / 6) % 6;
    int ina2 = 5 - ((indexstr + index) % 6);
    while (1)
    {
        switch (ina2)
        {
        case 1:
            old_a++;
            break;
        case 2:
            if ((old_b & 1) == 0)
            {
                old_a += 1;
            }
            old_b++;
            break;
        case 3:
            if ((old_b & 1) != 0)
            {
                old_a -= 1;
            }
            old_b++;
            break;
        case 4:
            old_a--;
            break;
        case 5:
            if ((old_b & 1) != 0)
            {
                old_a -= 1;
            }
            old_b--;
            break;
        default:
            if ((old_b & 1) == 0)
            {
                old_a += 1;
            }
            old_b--;
            break;
        }
        if (old_a < 0 || old_b < 0)
        {
            if (changindex > -1)
            {
                as[changindex] = 0;
            }
            return 0;
        }
        if (old_a > 9)
        {
            if (changindex > -1)
            {
                as[changindex] = 0;
            }
            return 0;
        }
        if (old_b > 8)
        {
            if (changindex > -1)
            {
                as[changindex] = 0;
            }
            return 0;
        }
        char aac = as[10 * old_b + old_a];
        if (aac != 0)
        {
            if (changindex > -1)
            {
                as[changindex] = 0;
            }
            return 0;
        }
        changindex = 10 * old_b + old_a;
        as[changindex] = 1;
        if (flag == 1)
        {
            *a = old_a;
            *b = old_b;
            return 1;
        }
        flag = 1;
        ina2 = ina1;
    }
}
char* sour = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
char getnext(char* put,int a ,int b,char* as_ok,int i)
{
    
    if (strcmp("GJ0V4LA4VKEVQZSVCN", put) == 0)
    {
        int a = 0;
   }
    i++;
    if (i >= 32)
    {
        return;
    }
    char get = 0;
    char as_11[90] = { 0 };
    int ua = a, ub = b;
    memcpy(as_11, as_ok, sizeof(as_11));
   
    for (size_t j = 0; j < strlen(sour); j++)
    {
        
        
        if (getresult(sour[j],&ua,&ub, as_11, i) == 1)
        {
            get = sour[j];
           /* if (get == '7' && i == 3)
            {
            }
            else
            {*/
                /*put[i] = get;
                getnext(put, ua, ub, as_11, i);*/
            //}
            put[i] = get;
            getnext(put, ua, ub, as_11, i);
            memcpy(as_11, as_ok, sizeof(as_11));
            ua = a;
            ub = b;
            get = 0;
                /*if ( i == 3)
                {
                    if (get == 'J')
                    {
                        put[i] = get;
                        getnext(put, ua, ub, as_11, i);
                    }
                    
                }
                else
                {
                    put[i] = get;
                    getnext(put, ua, ub, as_11, i);
                }*/
        }
        
    }
   
    if (get == 0)
    {
        put[i] = 0;
        int flag = 0;
        for (size_t k = 0; k < sizeof(as_11); k++)
        {
            if (as_11[k] < 1)
            {

                
                flag++;
            }
        }
        
        if (!flag)
        {
            printf("%s[OK]\n", put);
            return;
        }
        else
        {
            printf("%s[out %d]\n", put,flag);
        }
    }
    else
    {
        printf("%s[out %c]\n", put,get);
    }
   
}

void main()
{
    char putstr[50] = { 0 };
    
    char have[50] = { 0 };
    int a = 0, b = 0;
    getnext(putstr, a, b, as_1, -1);
    getchar();
    /*for (int i = 0; i < 100; i++)
    {
        for (int j = 0; j < strlen(sour); j++)
        {
            if (i == 0)
            {
                if (getresult(sour[j], i) == 1)
                {
                    int flag = 0;
                    for (size_t h  = 0; h < strlen(have); h++)
                    {
                        if (have[h] == sour[j])
                        {
                            a = 0;
                            b = 0;
                            memcpy(as_1, as_bak, sizeof(as_bak));
                            flag = 1;
                            break;
                        }
                    }
                    if (flag == 0)
                    {
                        putstr[i] = sour[j];
                        break;
                    }
                }
            }
            else if(getresult(sour[j], i) == 1)
            {
                putstr[i] = sour[j];
                break;
            }
        }
        if (putstr[i] == 0)
        {
            if (strlen(putstr) == 0)
            {
                return;
            }
            for (size_t k = 0; k < sizeof(as_1); k++)
            {
                if (as_1[k] == 0)
                {
       
                    printf("%s[out]\n", putstr);
                    a = 0;
                    b = 0;
                    i = -1;
                    sprintf(have, "%s%c", have, putstr[0]);
                    memset(putstr, 0, sizeof(putstr));
                    memcpy(as_1, as_bak, sizeof(as_bak));
                    break;
                }
            }
            if (i != -1)
            {
                printf("%s[OK]\n", putstr);
                return;
            }
        }
    }*/
}



[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

收藏
点赞1
打赏
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回