1、请编写函数void Func(int *a, int *n);它的功能是:求出1到1000之内能被7或11整除、但不能同时被7和11整除的所有整数并将它们放在a所指的数组中,通过n返回这些数的个数。注:假设a所指的数组有足够的空间存储满足条件的数。
/* 1、请编写函数void Func(int *a, int *n);它的功能是:求出1到1000之内能被7或11整除、但不能同时被7和11整除的所有整数并将它们放在a所指的数组中,通过n返回这些数的个数。注:假设a所指的数组有足够的空间存储满足条件的数。 */ #include <stdio.h> void Func(int *arr, int *n) { for (int i = 1; i < 1001; i++) { if (i % 7 == 0 && i % 11 == 0) continue; if (i % 7 == 0 || i % 11 == 0) { *(arr + (*n)++) = i; } } } int main() { int arr[1000], n = 0; Func(arr, &n); for (int i = 0; i < n; i++) { printf("%d ", arr[i]); } return 0; }
2、编一个函数,用递归方法求n阶勒让德多项式的值。其中:多项式的值通过函数返回,多
项式的阶n以及多项式的变量x通过函数参数传递。递归公式如下:
p n ( x ) = { 1 ( n = 0 ) x ( n = 1 ) ( ( 2 n − 1 ) ∗ x − p n − 1 ( x ) − ( n − 1 ) ∗ p n − 2 ( x ) ) / n ( n ≥ 1 ) p_n(x)=\begin{dcases} 1 & (n=0) \\ x & (n=1) \\ ((2n-1)*x-p_{n-1}(x)-(n-1)*p_{n-2}(x))/n & (n \geq 1) \end{dcases} pn(x)=⎩⎪⎨⎪⎧1x((2n−1)∗x−pn−1(x)−(n−1)∗pn−2(x))/n(n=0)(n=1)(n≥1)
#include <stdio.h> int temp[100]; int calc(int n, int x) { if (temp[n]) return temp[n]; int res; if (n == 0) res = 1; else if (n == 1) res = x; else res = ((2 * n - 1) * x - calc(n - 1, x) - (n - 1) * calc(n - 2, x)) / n; return temp[n] = res; } int main() { int n, x; scanf("%d%d", &n, &x); int res = calc(n, x); return 0; }
3、有一个单链表,其结点的元素值以非递减有序排列,编写一个函数删除该单链表中多余的元素值相同的结点。
#include <stdio.h> #include <stdlib.h> #include <time.h> typedef struct Node { int data; struct Node *next; } LinkList; void deletSameEle(LinkList *head) { // 答案就是这个函数 LinkList *p = head->next, *q = head->next; while (p) { while (q && p->data == q->data) q = q->next; p->next = q; p = p->next; } } void PrintLink(LinkList *head) { // 打印链表 LinkList *p = head->next; while (p) { printf("%d->", p->data); p = p->next; } printf("NULL\n"); } int cmp(const void *a, const void *b) { return *(int *)a - *(int *)b; } int main() { int n = 0, arr[100]; LinkList *head = (LinkList *)malloc(sizeof(LinkList)), *p = head; srand((unsigned)time(NULL)); for (int i = 0; i < n; i++) { arr[i] = rand() % 10; } qsort(arr, n, sizeof 4, cmp); for (int i = 0; i < n; i++) { LinkList *temp = (LinkList *)malloc(sizeof(LinkList)); temp->data = arr[i]; p->next = temp; p = p->next; } p->next = NULL; PrintLink(head); deletSameEle(head); PrintLink(head); return 0; }
4、设一棵二义树以二叉链表为存储结构,设计一个算法求二义树的高度。
参考oj,acwing:71. 二叉树的深度https://www.acwing.com/problem/content/description/67/
#include <stdio.h> #include <stdlib.h> #include <time.h> #define N 10 // 不能使用const, c语言里面的const表示只读,不能用来定义数组大小 typedef struct TreeNode { int data; struct TreeNode *lchild, *rchild; } TreeNode; int treeDepth(TreeNode *root) { // 求二叉树高度 if (!root) return 0; return max(treeDepth(root->lchild), treeDepth(root->rchild)) + 1; } int main() { // 参考oj,acwing:71. 二叉树的深度<https://www.acwing.com/problem/content/description/67/> return 0; }