void con vert(i nt *result, int n) {
if(n>=10)
con vert(result+1, n/10);
*result = n %10;
}
int main (i nt argc, char* argv[]) {
int n = 123456789, result[20]={};
conv ert(result, n);
prin tf("%d:", n);
for(i nt i=0; i<9; i++)
prin tf("%d", result[i]);
}
2、求高于平均分的学生学号及成绩(学号和成绩人工输入)
double fin d(i nt total, i nt n) {
int number, score, average;
scan f("%d", &nu mber);
if(number != 0) {
sca nf("%d", &score);
average = fin d(total+score, n+1);
if(score >= average)
prin tf("%d:%d\n", nu mber, score);
retur n average;
} else {
printf("Average=%d\n", total/n);
return total/n;
}
}
int main (i nt argc, char* argv[]) {
fin d(0, 0);
}
3、递归实现回文判断(如:abcdedbca就是回文,判断一个面试者对递归理解的 简单程序)
int find(char *str, int n) {
if(n<=1) return 1;
else if(str[O]==str[ n-1])return fin d(st r+1, n-2);
elsereturn 0;
}
int main (i nt argc, char* argv[]) {
char *str = "abcdedcba";
printf("%s: %s\n", str, find(str, strlen(str)) ? "Yes" : "No");
}
4、组合问题(从M个不同字符中任取N个字符的所有组合) void find(char *source, char *result, int n) {
if(n==1) {
while(*source)
prin tf("%s%c\n", result, *source++);
} else {
int i, j;
for(i=0; source[i] != 0; i++);
for(j=0; result[j] != 0; j++);
for(; i>=n; i--) {
result[j] = *source++;
result[j+1] = '\0';
fin d(source, result, n-1);
}
}
}
int main (i nt argc, char* argv[]) {
int const n = 3;
char *source = "ABCDE", result [n+1] = {0};
if(n>0 && strle n( source)>0 && n<=strle n( source))
fin d(source, result, 3);
}
5、分解成质因数(如 435234=251*17*17*3*2,据说是华为笔试题)
void prim(i nt m, int n) {
if(m >n) {
while(m%n != 0) n++;
m /= n;
prim(m, n);
prin tf("%d*", n);
}
}
int main (i nt argc, char* argv[]) {
int n = 435234;
prin tf("%d=", n);
prim(n, 2);
}
6寻找迷宫的一条出路,o:通路;X :障碍。(大家经常谈到的一个小算法 题)
#defi ne MAX_SIZE 8
int H[4] = {0, 1, 0, -1};
in t V[4] = {-1,0, 1, 0};
char Maze[MAX_SIZE][MAX_SIZE] = {{'X','X','X','X','X','X','X','X'},
{'o','o','o','o','o', 'X','X','X'},
{'X','o','X','X','o', X,'X','o'},
{'X','o','X','X','X','X', X,'X'},
{'X','o','X','X','o','o','o','X'},
{'X','o','o','o','o','X','o