| |
| |
| |
| |
| |
| |
| |
| #include <stdio.h> |
| #include <stdlib.h> |
| |
| int min(int a, int b) { |
| int m = a < b ? a : b; |
| return m; |
| } |
| int binomial_coefficient_0(int n, int m) { |
| long double ans = 1; |
| for (int i = 0; i < m; i++) { |
| ans = ans * (n - i); |
| ans = ans / (m - i); |
| } |
| return ans; |
| } |
| |
| int binomial_coefficient_1(int n, int m) { |
| if (m == 0 || n == m) |
| return 1; |
| return binomial_coefficient_1(n - 1, m - 1) + binomial_coefficient_1(n - 1, m); |
| |
| } |
| |
| int binomial_coefficient_2(int n, int m) { |
| int C[n + 1][m + 1]; |
| for (int i = 0; i <= n; i++) |
| for (int j = 0; j <= min(i, m); j++) { |
| if (j == i || j == 0) |
| C[i][j] = 1; |
| else |
| C[i][j] = C[i - 1][j - 1] + C[i - 1][j]; |
| } |
| return C[n][m]; |
| } |
| int main() { |
| int n, m; |
| scanf("%d %d", &n, &m); |
| printf("%d\n", binomial_coefficient_0(n, m)); |
| printf("%d\n", binomial_coefficient_1(n, m)); |
| printf("%d\n", binomial_coefficient_2(n, m)); |
| system("pause"); |
| return 0; |
| } |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| #include <stdio.h> |
| #include <stdlib.h> |
| |
| struct ListNode { |
| int val; |
| struct ListNode* next; |
| }; |
| |
| struct ListNode* Insert(struct ListNode* head, int new_value) { |
| if (head == NULL) { |
| struct ListNode* new_node = (struct ListNode*)malloc(sizeof(struct ListNode)); |
| new_node->val = new_value; |
| new_node->next = NULL; |
| return new_node; |
| } |
| else if (head->val >= new_value) { |
| struct ListNode* new_node = (struct ListNode*)malloc(sizeof(struct ListNode)); |
| new_node->val = new_value; |
| new_node->next = head; |
| return new_node; |
| } |
| else if (head->next == NULL) { |
| struct ListNode* new_node = (struct ListNode*)malloc(sizeof(struct ListNode)); |
| new_node->val = new_value; |
| new_node->next = NULL; |
| head->next = new_node; |
| return head; |
| } |
| else if ((head->next)->val >= new_value) { |
| struct ListNode* new_node = (struct ListNode*)malloc(sizeof(struct ListNode)); |
| new_node->val = new_value; |
| new_node->next = head->next; |
| head->next = new_node; |
| return head; |
| } |
| Insert(head->next, new_value); |
| return head; |
| } |
| |
| int main() { |
| printf("Please enter the number of node(s): \n"); |
| int n; |
| scanf("%d", &n); |
| struct ListNode NodeSet[n]; |
| |
| printf("Now please enter the value of your %d node(s) in ascending order: \n", n); |
| for (int i = 0; i < n - 1; i++) { |
| int value; |
| scanf("%d", &value); |
| NodeSet[i].val = value; |
| NodeSet[i].next = &NodeSet[i + 1]; |
| } |
| int value; |
| scanf("%d", &value); |
| NodeSet[n - 1].val = value; |
| NodeSet[n - 1].next = NULL; |
| |
| printf("Now please enter the new value: \n"); |
| int new_value; |
| struct ListNode* head; |
| scanf("%d", &new_value); |
| head = Insert(&NodeSet[0], new_value); |
| |
| printf("Now this is your new linked list: \n"); |
| while (head) { |
| printf("%d ", head->val); |
| head = head->next; |
| } |
| |
| putchar('\n'); |
| system("pause"); |
| return 0; |
| } |
| |
| |
| |
| |
| |
| |
| #include <stdio.h> |
| #include <stdlib.h> |
| |
| int* MergeArray(int* list1, int size1, int* list2, int size2, int* return_size) { |
| *return_size = size1 + size2; |
| int* list_merge = (int*)malloc(sizeof(int) * (*return_size)); |
| int ptr_merge = 0, ptr_list1 = 0, ptr_list2 = 0; |
| while (ptr_list1 < size1 && ptr_list2 < size2) { |
| if (list1[ptr_list1] <= list2[ptr_list2]) { |
| list_merge[ptr_merge] = list1[ptr_list1]; |
| ptr_list1++; |
| ptr_merge++; |
| } |
| else { |
| list_merge[ptr_merge] = list2[ptr_list2]; |
| ptr_list2++; |
| ptr_merge++; |
| } |
| } |
| while (ptr_list1 < size1) { |
| list_merge[ptr_merge] = list1[ptr_list1]; |
| ptr_list1++; |
| ptr_merge++; |
| } |
| while (ptr_list2 < size1) { |
| list_merge[ptr_merge] = list2[ptr_list2]; |
| ptr_list2++; |
| ptr_merge++; |
| } |
| return list_merge; |
| } |
| |
| int main() { |
| printf("Please enter the size of your first array: \n"); |
| int size1; |
| scanf("%d", &size1); |
| int list1[size1]; |
| printf("Now please enter your first array's %d element(s) in ascending order: \n", size1); |
| for (int i = 0; i < size1; i++) |
| scanf("%d", &list1[i]); |
| |
| printf("Please enter the size of your second array: \n"); |
| int size2; |
| scanf("%d", &size2); |
| int list2[size2]; |
| printf("Now please enter your second array's %d element(s) in ascending order: \n", size2); |
| for (int i = 0; i < size2; i++) |
| scanf("%d", &list2[i]); |
| |
| int size_merge = 0; |
| int* list_merge = MergeArray(list1, size1, list2, size2, &size_merge); |
| printf("There is your merged array with %d element(s): \n", size_merge); |
| for (int i = 0; i < size_merge; i++) |
| printf("%d ", list_merge[i]); |
| putchar('\n'); |
| free(list_merge); |
| |
| system("pause"); |
| return 0; |
| } |
| |
| |
| |
| |
| |
| |
| #include <stdio.h> |
| #include <stdlib.h> |
| #include <math.h> |
| double SubDeterminant_0(int n, int i, int** matrix); |
| double Determinant_0(int n, int** matrix); |
| double Determinant_1(int n, int** matrix); |
| |
| int main() { |
| printf("Please enter the size of your matrix: \n"); |
| int n; |
| scanf("%d", &n); |
| int matrix[n][n]; |
| |
| printf("Now please enter the element(s) of your matrix: \n"); |
| for (int i = 0; i < n; i++) |
| for (int j = 0; j < n; j++) |
| scanf("%d", &matrix[i][j]); |
| |
| printf("The determinant of your matrix is : \n%lE\n", Determinant_0(n, (int**)matrix)); |
| printf("The determinant of your matrix is : \n%lE\n", Determinant_1(n, (int**)matrix)); |
| system("pause"); |
| return 0; |
| } |
| |
| double Determinant_0(int n, int** matrix) { |
| int(*array)[n] = (int(*)[n])matrix; |
| if (n == 1) |
| return array[0][0]; |
| else { |
| double sum = 0, sub_det; |
| for (int i = 0; i < n; i++) { |
| sub_det = SubDeterminant_0(n, i, matrix); |
| sum += pow(-1, i) * sub_det * array[0][i]; |
| } |
| return sum; |
| } |
| } |
| double SubDeterminant_0(int n, int i, int** matrix) { |
| int(*sub_matrix)[n - 1] = (int(*)[n - 1]) malloc(sizeof(int) * (n - 1) * (n - 1)); |
| int(*array)[n] = (int(*)[n])matrix; |
| for (int j = 0; j < n - 1; j++) { |
| for (int m = 0; m < n - 1; m++) { |
| if (m < i) |
| sub_matrix[j][m] = array[j + 1][m]; |
| else |
| sub_matrix[j][m] = array[j + 1][m + 1]; |
| } |
| } |
| double sub_det = Determinant_0(n - 1, (int**)sub_matrix); |
| free(sub_matrix); |
| return sub_det; |
| } |
| |
| double Determinant_1(int n, int** matrix) { |
| int(*array)[n] = (int(*)[n])matrix; |
| double gauss[n][n]; |
| for (int i = 0; i < n; i++) |
| for (int j = 0; j < n; j++) |
| gauss[i][j] = array[i][j]; |
| |
| for (int diagonal = 0; diagonal < n; diagonal++) { |
| if (gauss[diagonal][diagonal] == 0) { |
| int row; |
| for (row = diagonal + 1; row < n; row++) |
| if (gauss[row][diagonal] != 0) |
| break; |
| if (row == n) |
| return 0; |
| for (int col = diagonal; col < n; col++) |
| gauss[diagonal][col] += gauss[row][col]; |
| } |
| for (int row = diagonal + 1; row < n; row++) { |
| double ratio = -1 * (gauss[row][diagonal] / gauss[diagonal][diagonal]); |
| for (int col = diagonal; col < n; col++) |
| gauss[row][col] += ratio * gauss[diagonal][col]; |
| } |
| } |
| double det = 1.0; |
| for (int i = 0; i < n; i++) |
| det *= gauss[i][i]; |
| return det; |
| } |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| #include <stdio.h> |
| #include <stdlib.h> |
| #include <string.h> |
| #include <stdbool.h> |
| #define MAX_LEN 1000 |
| |
| bool IsSubstring(char* a, char* b) { |
| int len_a = strlen(a), len_b = strlen(b); |
| for (int i = 0; i <= len_b - len_a; i++) |
| if (strncmp(a, b + i, len_a) == 0) |
| return true; |
| return false; |
| } |
| |
| int main() { |
| char a[MAX_LEN], b[MAX_LEN]; |
| printf("Please enter string a: \n"); |
| scanf("%s", a); |
| printf("Now please enter string b: \n"); |
| scanf("%s", b); |
| |
| bool judge = IsSubstring(a, b); |
| if (judge) |
| printf("string a is a substring of b.\n"); |
| else |
| printf("string a is NOT a substring of b.\n"); |
| system("pause"); |
| return 0; |
| } |
| |
| |
| |
| |
| |
| |
| #include <stdio.h> |
| #include <stdlib.h> |
| |
| void Move_Hanoi(int n, char A, char B, char C) { |
| if (n == 1) |
| printf("%c -> %c\n", A, C); |
| else { |
| Move_Hanoi(n - 1, A, C, B); |
| printf("%c -> %c\n", A, C); |
| Move_Hanoi(n - 1, B, A, C); |
| } |
| } |
| |
| void Hanoi(int n) { |
| char A = 'A', B = 'B', C = 'C'; |
| if (n == 1) |
| printf("A -> B\n"); |
| else if (n == 2) |
| printf("A -> B\n" |
| "A -> C\n"); |
| else if (n & 2 == 1) { |
| Move_Hanoi(n - 1, A, B, C); |
| printf("A -> B\n"); |
| Move_Hanoi(n - 2, C, B, A); |
| Hanoi(n - 2); |
| } |
| else { |
| Move_Hanoi(n - 1, A, C, B); |
| printf("A -> C\n"); |
| Move_Hanoi(n - 2, B, C, A); |
| Hanoi(n - 2); |
| } |
| } |
| |
| int main() { |
| printf("Please enter the size of your Hanoi: \n"); |
| int n; |
| scanf("%d", &n); |
| |
| printf("There is the movement of your Hanoi: \n"); |
| Hanoi(n); |
| |
| system("pause"); |
| return 0; |
| } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本