-
-
[原创]题目二我的算法
-
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虚拟机自动化脱壳的方法
赞赏
看原图