DataStruct Based on String!
Posted 小淼博客
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了DataStruct Based on String!相关的知识,希望对你有一定的参考价值。
Que1:两个字符串中的字符相同,出现的次数也相同,但是出现的顺序不同则认为这两个字符串是兄弟字符串。(eg:“ADB”和“DBA”就是兄弟字符串)现在提供一对字符串,如何确定他们是否是兄弟字符串?
采用散列表的方式来解决这个问题,由于不考虑排列的问题,所以只需要记录出现的次数就可以了!详细的程序如下所示:
1 #include <stdio.h> 2 #include <string.h> 3 #include <stdlib.h> 4 #include <stdbool.h> 5 6 bool StringBrother(const char *str0, const char *str1); 7 8 int main() 9 { 10 char *str0 = malloc(sizeof(char)*100); 11 char *str1 = malloc(sizeof(char)*100); 12 scanf("%s",str0); 13 scanf("%s",str1); 14 if(StringBrother(str0,str1)) 15 { 16 printf("GOOD BROTHER!\\n"); 17 } 18 else 19 { 20 printf("NOT BROTHER!\\n"); 21 } 22 return 0; 23 } 24 bool StringBrother(const char *str0, const char *str1) 25 { 26 int len0,len1,i,pos,param[26]={0}; 27 len0 = strlen(str0); 28 len1 = strlen(str1); 29 if(len0 != len1) return false; 30 printf("String\'s content:\\n"); 31 for(i=0;i<len0;i++) 32 { 33 pos = *(str0+i) - \'A\'; 34 param[pos] += 1; 35 pos = *(str1+i) - \'A\'; 36 param[pos] -= 1; 37 printf("The param0[%d] is:%d\\n",pos,param[pos]); 38 } 39 for(i=0;i<26;i++) 40 { 41 if(param[i] != 0) return false; 42 } 43 return true; 44 }
输出测试结果如下所示:
Que2:数字转字符串C语言函数实现方法,任意一个int整数类型的数据转换为string类型
1 int num2str(char *str,int num) // 返回len 2 { 3 int temp, i = 0, j; 4 while (1) { // Transform the number 5 temp = num % 10; 6 str[i] = char(temp + 48); 7 i++; 8 num /= 10; 9 if (num == 0) break; 10 } 11 for (j = 0; j < i / 2; j++) { // reverse the number 12 temp = str[j]; 13 str[j] = str[i - j - 1]; 14 str[i - j - 1] = temp; 15 } 16 return i; 17 }
char *str为保存字符串数据的地址空间
int num为需要转换的整型数据
Que3: 随机输入四个数字,求解满足数字通过加减乘除的方式得到24,求解成功输出计算的算式:
1 /* 导入头文件 */ 2 #include <stdio.h> 3 #include <stdlib.h> 4 #include <libgen.h> 5 #include <string.h> 6 7 /* 宏定义基本的加减乘除运算 */ 8 #define sub(A,B) A>B?A-B:B-A 9 #define div(A,B) A>B?A/B:B/A 10 #define mul(A,B) A*B 11 #define sum(A,B) A+B 12 13 /* 函数声明过程 方便调用 */ 14 int four_calc_try(float p1,float p2, float A, float B, float C, float D, char o, char p); 15 int all_seq_try(float A,float B,float C,float D); 16 int Get_Methed_Func(float *N); 17 18 19 /* 主函数main */ 20 int main ( int argc, char *argv[] ) 21 { 22 float X[4] = {0}; // 定义并初始化数字变量X 23 if(argc < 2){ // 判读main文件运行的方式 直接参数方式或者手动循环输入方式 24 while(1){ 25 printf("Please enter four number:"); 26 scanf("%f %f %f %f",X+0,X+1,X+2,X+3); // 输入参数 27 printf("The number you input:%.1f %.1f %.1f %.1f\\n",X[0],X[1],X[2],X[3]); // 打印数字参数 28 if(!Get_Methed_Func(X)) { printf("No Result!\\n"); } // 调用计算函数 并返回运算结果 29 } 30 } 31 else{ 32 X[0] = atof(argv[1]); // 输入参数转化为浮点数 33 X[1] = atof(argv[2]); // 输入参数转化为浮点数 34 X[2] = atof(argv[3]); // 输入参数转化为浮点数 35 X[3] = atof(argv[4]); // 输入参数转化为浮点数 36 printf("The number you input:%.1f %.1f %.1f %.1f\\n",X[0],X[1],X[2],X[3]); // 参数打印 37 if(!Get_Methed_Func(X)) { printf("No Result!\\n"); } // 计算结果 38 } 39 return 1; 40 } 41 42 /* 具体的函数方法实现 */ 43 44 /* 尝试两个part之间的不同算式的运算情况(+-x/) 判断计算的结果是否满足24 并退出*/ 45 int four_calc_try(float p1,float p2, float A, float B, float C, float D, char o, char p) 46 { 47 float R; 48 R = sum(p1,p2); if(R == 24){printf("(%.1f%c%.1f)+(%.1f%c%.1f)=%.1f\\n",A,o,B,C,p,D,R); return 1;} // 加法判断 49 R = sub(p1,p2); if(R == 24){if(p1>p2){printf("(%.1f%c%.1f)-(%.1f%c%.1f)=%.1f\\n",A,o,B,C,p,D,R);}else{printf("(%.1f%c%.1f)-(%.1f%c%.1f)=%.1f\\n",C,p,D,A,o,B,R);} return 1;} // 减法判断 50 if(p1 < 0 && p2 > 0 || p1 > 0 && p2 < 0) return 0; // 乘法和除法的提前判断,如果一正一负则不用再计算乘除!(提高效率) 51 R = mul(p1,p2); if(R == 24){printf("(%.1f%c%.1f)*(%.1f%c%.1f)=%.1f\\n",A,o,B,C,p,D,R); return 1;} // 计算判断乘法 52 R = div(p1,p2); if(R == 24){if(p1>p2){printf("(%.1f%c%.1f)/(%.1f%c%.1f)=%.1f\\n",A,o,B,C,p,D,R);}else{printf("(%.1f%c%.1f)-(%.1f%c%.1f)=%.1f\\n",C,p,D,A,o,B,R);} return 1;} // 计算判断除法 53 return 0; 54 } 55 56 /* 调用part1|part2计算函数,并暴力完成part1和part2所有组合方式的枚举 */ 57 int all_seq_try(float A,float B,float C,float D) 58 { 59 float p1; 60 float p21 = C+D; if(p21 == 0) { p21 = 0.001; } // 计算不同的part2 61 float p22 = C-D; if(p22 == 0) { p22 = 0.001; } 62 float p23 = D-C; if(p23 == 0) { p23 = 0.001; } 63 float p24 = C*D; if(p24 == 0) { p24 = 0.001; } 64 float p25 = C/D; if(p25 == 0) { p25 = 0.001; } 65 float p26 = D/C; if(p26 == 0) { p26 = 0.001; } 66 67 // printf("A+B\\n"); 68 p1 = A+B; if(p1 == 0) { p1 = 0.001; } // 计算part1 并规避为0的程序Bug 69 if(four_calc_try(p1,p21,A,B,C,D,\'+\',\'+\')) {return 1;} // 测试part1和part2 当前状态下的情况 70 if(four_calc_try(p1,p22,A,B,C,D,\'+\',\'-\')) {return 1;} 71 if(four_calc_try(p1,p23,A,B,D,C,\'+\',\'-\')) {return 1;} 72 if(four_calc_try(p1,p24,A,B,C,D,\'+\',\'*\')) {return 1;} 73 if(four_calc_try(p1,p25,A,B,C,D,\'+\',\'/\')) {return 1;} 74 if(four_calc_try(p1,p26,A,B,D,C,\'+\',\'/\')) {return 1;} 75 76 // printf("A-B\\n"); 77 p1 = A-B; if(p1 == 0) { p1 = 0.001; } 78 if(four_calc_try(p1,p21,A,B,C,D,\'-\',\'+\')) {return 1;} 79 if(four_calc_try(p1,p22,A,B,C,D,\'-\',\'-\')) {return 1;} 80 if(four_calc_try(p1,p23,A,B,D,C,\'-\',\'-\')) {return 1;} 81 if(four_calc_try(p1,p24,A,B,C,D,\'-\',\'*\')) {return 1;} // 2 4 2 11 (-2,22) 82 if(four_calc_try(p1,p25,A,B,C,D,\'-\',\'/\')) {return 1;} 83 if(four_calc_try(p1,p26,A,B,D,C,\'-\',\'/\')) {return 1;} 84 85 // printf("A*B\\n"); 86 p1 = A*B; if(p1 == 0) { p1 = 0.001; } 87 if(four_calc_try(p1,p21,A,B,C,D,\'*\',\'+\')) {return 1;} 88 if(four_calc_try(p1,p22,A,B,C,D,\'*\',\'-\')) {return 1;} 89 if(four_calc_try(p1,p23,A,B,D,C,\'*\',\'-\')) {return 1;} 90 if(four_calc_try(p1,p24,A,B,C,D,\'*\',\'*\')) {return 1;} 91 if(four_calc_try(p1,p25,A,B,C,D,\'*\',\'/\')) {return 1;} 92 if(four_calc_try(p1,p26,A,B,D,C,\'*\',\'/\')) {return 1;} 93 94 95 // printf("A/B\\n"); 96 if(B==0) {p1 = 1000000;} else{p1 = A/B;} if(p1 == 0) { p1 = 0.001; } 97 if(four_calc_try(p1,p21,A,B,C,D,\'/\',\'+\')) {return 1;} 98 if(four_calc_try(p1,p22,A,B,C,D,\'/\',\'-\')) {return 1;} 99 if(four_calc_try(p1,p23,A,B,D,C,\'/\',\'-\')) {return 1;} 100 if(four_calc_try(p1,p24,A,B,C,D,\'/\',\'*\')) {return 1;} 101 if(four_calc_try(p1,p25,A,B,C,D,\'/\',\'/\')) {return 1;} 102 if(four_calc_try(p1,p26,A,B,D,C,\'/\',\'/\')) {return 1;} 103 104 // printf("B-A\\n"); 105 p1 = B-A; if(p1 == 0) { p1 = 0.001; } 106 if(four_calc_try(p1,p21,B,A,C,D,\'-\',\'+\')) {return 1;} 107 if(four_calc_try(p1,p22,B,A,C,D,\'-\',\'-\')) {return 1;} 108 if(four_calc_try(p1,p23,B,A,D,C,\'-\',\'-\')) {return 1;} 109 if(four_calc_try(p1,p24,B,A,C,D,\'-\',\'*\')) {return 1;} 110 if(four_calc_try(p1,p25,B,A,C,D,\'-\',\'/\')) {return 1;} 111 if(four_calc_try(p1,p26,B,A,D,C,\'-\',\'/\')) {return 1;} 112 113 // printf("B/A\\n"); 114 if(A==0) {p1 = 1000000;} else{p1 = B/A;} if(p1 == 0) { p1 = 0.001; } 115 if(four_calc_try(p1,p21,B,A,C,D,\'/\',\'+\')) {return 1;} 116 if(four_calc_try(p1,p22,B,A,C,D,\'/\',\'-\')) {return 1;} 117 if(four_calc_try(p1,p23,B,A,D,C,\'/\',\'-\')) {return 1;} 118 if(four_calc_try(p1,p24,B,A,C,D,\'/\',\'*\')) {return 1;} 119 if(four_calc_try(p1,p25,B,A,C,D,\'/\',\'/\')) {return 1;} 120 if(four_calc_try(p1,p26,B,A,D,C,\'/\',\'/\')) {return 1;} 121 122 return 0; 123 } 124 125 /* 126 任何数字的基本运算都可以分割成为基本的双目运算,这是计算的基本性质,据此,我们将4个数字的运算分解为两个part的运算。 127 被分割之后的运算又是两个数字的计算,因此,枚举出所有的双目运算的全部情况,就可以完成数据的判断和计算。 128 */ 129 int Get_Methed_Func(float *N) 130 { 131 float A=N[0],B=N[1],C=N[2],D=N[3]; 132 // Mothed-0:(X0,X1)|(X2,X3) 133 // printf("Mothed-0\\n"); 134 if(all_seq_try(A,B,C,D)) {return 1;} // AB组合 CD组合 情景1 135 // Mothed-1:(X0,X2)|(X1,X3) 136 // printf("Mothed-1\\n"); 137 if(all_seq_try(A,C,B,D)) {return 1;} // AC组合 BD组合 情景2 138 // Mothed-2:(X0,X3)|(X1,X2) 139 // printf("Mothed-2\\n"); 140 if(all_seq_try(A,D,B,C)) {return 1;} // AD组合 BD组合 情景3 141 return 0; 142 }
运行方式1:
运行方式2:
以上是关于DataStruct Based on String!的主要内容,如果未能解决你的问题,请参考以下文章
[记录]calculate age based on date of birth
GCN BASED ON pytorch geometric
Shell Sort based on insert sort
Edge Computing Implementation Based on VM