【Pointers On C】C和指针部分编程题 solution

来源:互联网 发布:acfun mac客户端下载 编辑:程序博客网 时间:2024/06/06 07:08

第6章 指针


6.18.3   编写函数reverse_string,  函数原型为 void reverse_string(char *string);

#define NUL '\0'void reverse_string(char *str){char *tail = str;char *head = str;int len = 0;for (; *tail++ != NUL;) len ++;cout << len << endl;for(int i = 0; i < len/2; i ++){char tmp = *(str+i) ;*(str+i) = *(str+len-i-1);*(str+len-i-1) = tmp;}}


第7章 函数

7.11.1  递归编写Hermite Polynomials, 函数原型为 int hermite(int n, int x);

int hermite(int n, int x){if(n <= 0) return 1;if(n == 1) return 2*x;return  2*x * hermite(n-1, x) - 2*(n-1) * hermite(n-2, x);}


7.11.1  函数原型 int ascii_to_integer(char *string)

int ascii_to_integer(char *string){int ans = 0;while(*string != '\0')ans = ans * 10 + (*string ++) - '0';return ans;}

第8章 数组

8.8.5  矩阵乘法, 函数原型 void matrix_multiply(int *m1, int *m2, int *r, int x, int y, int z);

void matrix_multiplication(int *m1, int *m2, int *r, int x, int y, int z){for(int i = 0; i < x; i ++)for(int j = 0; j < z; j ++)for(int k = 0; k < y; k ++)*(r+(i*z+j)) += (*(m1+(i*y+k))) * (*(m2+(k*z+j)));for(int i = 0; i < x; i ++){for(int j = 0; j < z; j ++)cout << *(r+i*x+j) << " ";cout << endl;}}int main(){int a[][2] = {2, -6, 3, 5, 1, -1};int b[][4] = {4, -2, -4, -5, -7, -3, 6, 7};int c[3][4] = {0};memset(c, 0, sizeof(c));matrix_multiplication(&a[0][0], &b[0][0], &c[0][0], 3, 2, 4);return 0;}

8.8.8 八皇后

const int N = 10;bool mark[N][N];int q[N][N];int dir[8][2] = {1, 0, -1, 0, 0, 1, 0, -1, 1, 1, 1, -1, -1, -1, -1, 1};bool safe(int row, int col){memset(mark, false, sizeof(mark));for(int i = 0; i < 8; i ++)for(int j = 0; j < 8; j ++){if(q[i][j]){for(int k = 0; k < 8; k ++){int tx = i + dir[k][0];int ty = j + dir[k][1];while(tx < 8 && ty < 8 && tx >= 0 && ty >= 0){mark[tx][ty] = true;tx += dir[k][0];ty += dir[k][1];}}}}return (!mark[row][col]);}void queen(int row, int col){if(row == 7){for(int i = 0; i < 8; i ++){for(int j = 0; j < 8; j ++) cout << q[i][j];cout << endl;}cout << "--------" << endl;return ;}for(int i = 0; i < 8; i ++){if(safe(row+1, i)){q[row+1][i] = 1;queen(row+1, i);q[row+1][i] = 0;}}}int main(){for(int i = 0; i < 8; i ++){q[0][i] = 1;queen(0, i);q[0][i] = 0;}return 0;}


 

0 0
原创粉丝点击