英飞凌-汽车自动驾驶计算&域控平台:安全、可靠与创新的技术引领者
英飞凌为自动驾驶(AD)和高级驾驶辅助系统(ADAS)提供从微控制器、传感器到功率半导体的一站式解决方案,特别是在安全关键系统领域确立了行业标杆地位。
2025-07-08
以下是100道针对CSP-J/S考试的C++算法程序填空题,涵盖了常见的算法和数据结构知识点。
cpp
#include <iostream>using namespace std;int main() { int a, b; cin >> a >> b; cout << a + b << endl; // 填空:计算a和b的和 return 0;}
cpp
#include <iostream>using namespace std;int main() { int n; cin >> n; if (n % 2 == 0) { // 填空:判断n是否为偶数 cout << "Even" << endl; } else { cout << "Odd" << endl; } return 0;}
cpp
#include <iostream>using namespace std;int main() { int a, b, c; cin >> a >> b >> c; int max = a; if (b > max) max = b; // 填空:判断b是否大于当前最大值 if (c > max) max = c; // 填空:判断c是否大于当前最大值 cout << max << endl; return 0;}
cpp
#include <iostream>using namespace std;int main() { int n; cin >> n; int result = 1; for (int i = 1; i <= n; i++) { result *= i; // 填空:计算阶乘 } cout << result << endl; return 0;}
cpp
#include <iostream>#include <cmath>using namespace std;int main() { int n; cin >> n; bool isPrime = true; if (n <= 1) { isPrime = false; } else { for (int i = 2; i <= sqrt(n); i++) { // 填空:循环终止条件 if (n % i == 0) { isPrime = false; break; } } } cout << (isPrime ? "Yes" : "No") << endl; return 0;}
cpp
#include <iostream>using namespace std;int main() { int n; cin >> n; int arr[n], sum = 0; for (int i = 0; i < n; i++) { cin >> arr[i]; sum += arr[i]; // 填空:累加数组元素 } cout << sum << endl; return 0;}
cpp
#include <iostream>using namespace std;int main() { int n; cin >> n; int arr[n], max; for (int i = 0; i < n; i++) { cin >> arr[i]; if (i == 0 || arr[i] > max) { // 填空:判断当前元素是否大于最大值 max = arr[i]; } } cout << max << endl; return 0;}
cpp
#include <iostream>using namespace std;int main() { int n; cin >> n; int arr[n]; for (int i = 0; i < n; i++) { cin >> arr[i]; } for (int i = n - 1; i >= 0; i--) { // 填空:逆序输出起始索引 cout << arr[i] << " "; } return 0;}
cpp
#include <iostream>#include <string>using namespace std;int main() { string s; char target; cin >> s >> target; int count = 0; for (char c : s) { if (c == target) { // 填空:判断字符是否匹配目标 count++; } } cout << count << endl; return 0;}
cpp
#include <iostream>#include <string>#include <algorithm>using namespace std;int main() { string s; cin >> s; reverse(s.begin(), s.end()); // 填空:反转字符串 cout << s << endl; return 0;}
cpp
#include <iostream>using namespace std;void bubbleSort(int arr[], int n) { for (int i = 0; i < n-1; i++) { for (int j = 0; j < n-i-1; j++) { if (arr[j] > arr[j+1]) { // 填空:比较相邻元素 swap(arr[j], arr[j+1]); } } }}int main() { int n; cin >> n; int arr[n]; for (int i = 0; i < n; i++) cin >> arr[i]; bubbleSort(arr, n); for (int i = 0; i < n; i++) cout << arr[i] << " "; return 0;}
cpp
#include <iostream>using namespace std;void selectionSort(int arr[], int n) { for (int i = 0; i < n-1; i++) { int min_idx = i; for (int j = i+1; j < n; j++) { if (arr[j] < arr[min_idx]) { // 填空:找到最小元素的索引 min_idx = j; } } swap(arr[i], arr[min_idx]); }}int main() { int n; cin >> n; int arr[n]; for (int i = 0; i < n; i++) cin >> arr[i]; selectionSort(arr, n); for (int i = 0; i < n; i++) cout << arr[i] << " "; return 0;}
cpp
#include <iostream>using namespace std;void insertionSort(int arr[], int n) { for (int i = 1; i < n; i++) { int key = arr[i]; int j = i-1; while (j >= 0 && arr[j] > key) { // 填空:移动元素的条件 arr[j+1] = arr[j]; j--; } arr[j+1] = key; }}int main() { int n; cin >> n; int arr[n]; for (int i = 0; i < n; i++) cin >> arr[i]; insertionSort(arr, n); for (int i = 0; i < n; i++) cout << arr[i] << " "; return 0;}
cpp
#include <iostream>using namespace std;int partition(int arr[], int low, int high) { int pivot = arr[high]; int i = low - 1; for (int j = low; j < high; j++) { if (arr[j] < pivot) { // 填空:元素与基准比较 i++; swap(arr[i], arr[j]); } } swap(arr[i+1], arr[high]); return i+1;}void quickSort(int arr[], int low, int high) { if (low < high) { int pi = partition(arr, low, high); quickSort(arr, low, pi-1); quickSort(arr, pi+1, high); }}int main() { int n; cin >> n; int arr[n]; for (int i = 0; i < n; i++) cin >> arr[i]; quickSort(arr, 0, n-1); for (int i = 0; i < n; i++) cout << arr[i] << " "; return 0;}
cpp
#include <iostream>using namespace std;void merge(int arr[], int l, int m, int r) { int n1 = m - l + 1; int n2 = r - m; int L[n1], R[n2]; for (int i = 0; i < n1; i++) L[i] = arr[l + i]; for (int j = 0; j < n2; j++) R[j] = arr[m + 1 + j]; int i = 0, j = 0, k = l; while (i < n1 && j < n2) { if (L[i] <= R[j]) { // 填空:比较左右子数组元素 arr[k] = L[i]; i++; } else { arr[k] = R[j]; j++; } k++; } while (i < n1) arr[k++] = L[i++]; while (j < n2) arr[k++] = R[j++];}void mergeSort(int arr[], int l, int r) { if (l < r) { int m = l + (r - l) / 2; mergeSort(arr, l, m); mergeSort(arr, m+1, r); merge(arr, l, m, r); }}int main() { int n; cin >> n; int arr[n]; for (int i = 0; i < n; i++) cin >> arr[i]; mergeSort(arr, 0, n-1); for (int i = 0; i < n; i++) cout << arr[i] << " "; return 0;}
cpp
#include <iostream>using namespace std;int linearSearch(int arr[], int n, int x) { for (int i = 0; i < n; i++) { if (arr[i] == x) { // 填空:找到目标元素 return i; } } return -1;}int main() { int n, x; cin >> n; int arr[n]; for (int i = 0; i < n; i++) cin >> arr[i]; cin >> x; int result = linearSearch(arr, n, x); cout << result << endl; return 0;}
cpp
#include <iostream>using namespace std;int binarySearch(int arr[], int l, int r, int x) { while (l <= r) { int mid = l + (r - l) / 2; if (arr[mid] == x) { // 填空:找到目标元素 return mid; } if (arr[mid] < x) { l = mid + 1; } else { r = mid - 1; } } return -1;}int main() { int n, x; cin >> n; int arr[n]; for (int i = 0; i < n; i++) cin >> arr[i]; cin >> x; int result = binarySearch(arr, 0, n-1, x); cout << result << endl; return 0;}
cpp
#include <iostream>#include <vector>using namespace std;void DFS(int node, vector<vector<int>>& graph, vector<bool>& visited) { visited[node] = true; cout << node << " "; for (int neighbor : graph[node]) { if (!visited[neighbor]) { // 填空:判断邻居节点是否已访问 DFS(neighbor, graph, visited); } }}int main() { int n, e; cin >> n >> e; vector<vector<int>> graph(n); vector<bool> visited(n, false); for (int i = 0; i < e; i++) { int u, v; cin >> u >> v; graph[u].push_back(v); graph[v].push_back(u); } DFS(0, graph, visited); return 0;}
cpp
#include <iostream>#include <queue>#include <vector>using namespace std;void BFS(int start, vector<vector<int>>& graph, vector<bool>& visited) { queue<int> q; visited[start] = true; q.push(start); while (!q.empty()) { int node = q.front(); q.pop(); cout << node << " "; for (int neighbor : graph[node]) { if (!visited[neighbor]) { // 填空:判断邻居节点是否已访问 visited[neighbor] = true; q.push(neighbor); } } }}int main() { int n, e; cin >> n >> e; vector<vector<int>> graph(n); vector<bool> visited(n, false); for (int i = 0; i < e; i++) { int u, v; cin >> u >> v; graph[u].push_back(v); graph[v].push_back(u); } BFS(0, graph, visited); return 0;}
cpp
#include <iostream>#include <vector>using namespace std;bool isSafe(vector<vector<int>>& board, int row, int col, int n) { for (int i = 0; i < col; i++) { if (board[row][i]) return false; } for (int i = row, j = col; i >= 0 && j >= 0; i--, j--) { if (board[i][j]) return false; } for (int i = row, j = col; i < n && j >= 0; i++, j--) { if (board[i][j]) return false; // 填空:检查右下对角线 } return true;}bool solveNQUtil(vector<vector<int>>& board, int col, int n) { if (col >= n) return true; for (int i = 0; i < n; i++) { if (isSafe(board, i, col, n)) { board[i][col] = 1; if (solveNQUtil(board, col+1, n)) return true; board[i][col] = 0; } } return false;}int main() { int n; cin >> n; vector<vector<int>> board(n, vector<int>(n, 0)); if (solveNQUtil(board, 0, n)) { for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { cout << board[i][j] << " "; } cout << endl; } } else { cout << "No solution exists" << endl; } return 0;}
cpp
#include <iostream>using namespace std;int fibonacci(int n) { if (n <= 1) return n; int dp[n+1]; dp[0] = 0; dp[1] = 1; for (int i = 2; i <= n; i++) { dp[i] = dp[i-1] + dp[i-2]; // 填空:计算斐波那契数列 } return dp[n];}int main() { int n; cin >> n; cout << fibonacci(n) << endl; return 0;}
cpp
#include <iostream>#include <algorithm>using namespace std;int lis(int arr[], int n) { int dp[n]; for (int i = 0; i < n; i++) { dp[i] = 1; for (int j = 0; j < i; j++) { if (arr[j] < arr[i] && dp[i] < dp[j] + 1) { // 填空:判断递增条件 dp[i] = dp[j] + 1; } } } return *max_element(dp, dp+n);}int main() { int n; cin >> n; int arr[n]; for (int i = 0; i < n; i++) cin >> arr[i]; cout << lis(arr, n) << endl; return 0;}
cpp
#include <iostream>#include <algorithm>using namespace std;int knapSack(int W, int wt[], int val[], int n) { int dp[n+1][W+1]; for (int i = 0; i <= n; i++) { for (int w = 0; w <= W; w++) { if (i == 0 || w == 0) { dp[i][w] = 0; } else if (wt[i-1] <= w) { dp[i][w] = max(val[i-1] + dp[i-1][w-wt[i-1]], dp[i-1][w]); // 填空:状态转移方程 } else { dp[i][w] = dp[i-1][w]; } } } return dp[n][W];}int main() { int n, W; cin >> n >> W; int val[n], wt[n]; for (int i = 0; i < n; i++) cin >> val[i]; for (int i = 0; i < n; i++) cin >> wt[i]; cout << knapSack(W, wt, val, n) << endl; return 0;}
cpp
#include <iostream>#include <algorithm>using namespace std;int lcs(string X, string Y, int m, int n) { int dp[m+1][n+1]; for (int i = 0; i <= m; i++) { for (int j = 0; j <= n; j++) { if (i == 0 || j == 0) { dp[i][j] = 0; } else if (X[i-1] == Y[j-1]) { dp[i][j] = dp[i-1][j-1] + 1; // 填空:状态转移方程 } else { dp[i][j] = max(dp[i-1][j], dp[i][j-1]); } } } return dp[m][n];}int main() { string X, Y; cin >> X >> Y; cout << lcs(X, Y, X.length(), Y.length()) << endl; return 0;}
cpp
#include <iostream>#include <climits>using namespace std;int matrixChainOrder(int p[], int n) { int dp[n][n]; for (int i = 1; i < n; i++) { dp[i][i] = 0; } for (int L = 2; L < n; L++) { for (int i = 1; i < n-L+1; i++) { int j = i+L-1; dp[i][j] = INT_MAX; for (int k = i; k < j; k++) { int q = dp[i][k] + dp[k+1][j] + p[i-1]*p[k]*p[j]; if (q < dp[i][j]) { // 填空:更新最小值 dp[i][j] = q; } } } } return dp[1][n-1];}int main() { int n; cin >> n; int arr[n]; for (int i = 0; i < n; i++) cin >> arr[i]; cout << matrixChainOrder(arr, n) << endl; return 0;}
cpp
#include <iostream>#include <climits>using namespace std;int minDistance(int dist[], bool sptSet[], int V) { int min = INT_MAX, min_index; for (int v = 0; v < V; v++) { if (!sptSet[v] && dist[v] <= min) { min = dist[v]; min_index = v; } } return min_index;}void dijkstra(int graph[][100], int src, int V) { int dist[V]; bool sptSet[V]; for (int i = 0; i < V; i++) { dist[i] = INT_MAX; sptSet[i] = false; } dist[src] = 0; for (int count = 0; count < V-1; count++) { int u = minDistance(dist, sptSet, V); sptSet[u] = true; for (int v = 0; v < V; v++) { if (!sptSet[v] && graph[u][v] && dist[u] != INT_MAX && dist[u] + graph[u][v] < dist[v]) { // 填空:更新距离条件 dist[v] = dist[u] + graph[u][v]; } } } for (int i = 0; i < V; i++) { cout << i << " : " << dist[i] << endl; }}int main() { int V; cin >> V; int graph[100][100]; for (int i = 0; i < V; i++) { for (int j = 0; j < V; j++) { cin >> graph[i][j]; } } dijkstra(graph, 0, V); return 0;}
cpp
#include <iostream>using namespace std;#define INF 99999void floydWarshall(int graph[][100], int V) { int dist[V][V]; for (int i = 0; i < V; i++) { for (int j = 0; j < V; j++) { dist[i][j] = graph[i][j]; } } for (int k = 0; k < V; k++) { for (int i = 0; i < V; i++) { for (int j = 0; j < V; j++) { if (dist[i][k] + dist[k][j] < dist[i][j]) { // 填空:更新最短路径 dist[i][j] = dist[i][k] + dist[k][j]; } } } } for (int i = 0; i < V; i++) { for (int j = 0; j < V; j++) { if (dist[i][j] == INF) cout << "INF "; else cout << dist[i][j] << " "; } cout << endl; }}int main() { int V; cin >> V; int graph[100][100]; for (int i = 0; i < V; i++) { for (int j = 0; j < V; j++) { cin >> graph[i][j]; } } floydWarshall(graph, V); return 0;}
cpp
#include <iostream>#include <climits>using namespace std;int minKey(int key[], bool mstSet[], int V) { int min = INT_MAX, min_index; for (int v = 0; v < V; v++) { if (!mstSet[v] && key[v] < min) { min = key[v]; min_index = v; } } return min_index;}void primMST(int graph[][100], int V) { int parent[V]; int key[V]; bool mstSet[V]; for (int i = 0; i < V; i++) { key[i] = INT_MAX; mstSet[i] = false; } key[0] = 0; parent[0] = -1; for (int count = 0; count < V-1; count++) { int u = minKey(key, mstSet, V); mstSet[u] = true; for (int v = 0; v < V; v++) { if (graph[u][v] && !mstSet[v] && graph[u][v] < key[v]) { // 填空:更新键值条件 key[v] = graph[u][v]; parent[v] = u; } } } for (int i = 1; i < V; i++) { cout << parent[i] << " - " << i << " : " << graph[i][parent[i]] << endl; }}int main() { int V; cin >> V; int graph[100][100]; for (int i = 0; i < V; i++) { for (int j = 0; j < V; j++) { cin >> graph[i][j]; } } primMST(graph, V); return 0;}
cpp
#include <iostream>#include <algorithm>using namespace std;struct Edge { int src, dest, weight;};bool compare(Edge a, Edge b) { return a.weight < b.weight; // 填空:比较边权重}int find(int parent[], int i) { if (parent[i] == i) return i; return find(parent, parent[i]);}void unionSets(int parent[], int x, int y) { parent[x] = y;}void kruskalMST(Edge edges[], int V, int E) { sort(edges, edges+E, compare); int parent[V]; for (int i = 0; i < V; i++) parent[i] = i; Edge result[V]; int e = 0, i = 0; while (e < V-1 && i < E) { Edge next_edge = edges[i++]; int x = find(parent, next_edge.src); int y = find(parent, next_edge.dest); if (x != y) { result[e++] = next_edge; unionSets(parent, x, y); } } for (i = 0; i < e; i++) { cout << result[i].src << " - " << result[i].dest << " : " << result[i].weight << endl; }}int main() { int V, E; cin >> V >> E; Edge edges[E]; for (int i = 0; i < E; i++) { cin >> edges[i].src >> edges[i].dest >> edges[i].weight; } kruskalMST(edges, V, E); return 0;}
cpp
#include <iostream>#include <list>#include <stack>using namespace std;class Graph { int V; list<int>* adj; void topologicalSortUtil(int v, bool visited[], stack<int>& Stack) { visited[v] = true; for (auto i = adj[v].begin(); i != adj[v].end(); i++) { if (!visited[*i]) { topologicalSortUtil(*i, visited, Stack); } } Stack.push(v); // 填空:将当前顶点入栈 } public: Graph(int V) { this->V = V; adj = new list<int>[V]; } void addEdge(int v, int w) { adj[v].push_back(w); } void topologicalSort() { stack<int> Stack; bool* visited = new bool[V]; for (int i = 0; i < V; i++) visited[i] = false; for (int i = 0; i < V; i++) { if (!visited[i]) { topologicalSortUtil(i, visited, Stack); } } while (!Stack.empty()) { cout << Stack.top() << " "; Stack.pop(); } }};int main() { int V, E; cin >> V >> E; Graph g(V); for (int i = 0; i < E; i++) { int u, v; cin >> u >> v; g.addEdge(u, v); } g.topologicalSort(); return 0;}
cpp
#include <iostream>using namespace std;int gcd(int a, int b) { if (b == 0) return a; return gcd(b, a % b); // 填空:递归计算gcd}int main() { int a, b; cin >> a >> b; cout << gcd(a, b) << endl; return 0;}
cpp
#include <iostream>using namespace std;int gcd(int a, int b) { if (b == 0) return a; return gcd(b, a % b);}int lcm(int a, int b) { return (a * b) / gcd(a, b); // 填空:计算最小公倍数}int main() { int a, b; cin >> a >> b; cout << lcm(a, b) << endl; return 0;}
cpp
#include <iostream>using namespace std;long long power(long long base, long long exp, long long mod) { long long result = 1; base = base % mod; while (exp > 0) { if (exp % 2 == 1) { result = (result * base) % mod; } exp = exp >> 1; base = (base * base) % mod; // 填空:更新base } return result;}int main() { long long base, exp, mod; cin >> base >> exp >> mod; cout << power(base, exp, mod) << endl; return 0;}
cpp
#include <iostream>using namespace std;int nCr(int n, int r) { if (r == 0 || r == n) return 1; return nCr(n-1, r-1) + nCr(n-1, r); // 填空:递归计算组合数}int main() { int n, r; cin >> n >> r; cout << nCr(n, r) << endl; return 0;}
cpp
#include <iostream>#include <vector>using namespace std;void sieveOfEratosthenes(int n) { vector<bool> prime(n+1, true); prime[0] = prime[1] = false; for (int p = 2; p * p <= n; p++) { if (prime[p]) { for (int i = p * p; i <= n; i += p) { prime[i] = false; // 填空:标记非素数 } } } for (int p = 2; p <= n; p++) { if (prime[p]) cout << p << " "; }}int main() { int n; cin >> n; sieveOfEratosthenes(n); return 0;}
cpp
#include <iostream>#define MAX 1000using namespace std;class Stack { int top; public: int a[MAX]; Stack() { top = -1; } bool push(int x); int pop(); bool isEmpty();};bool Stack::push(int x) { if (top >= MAX-1) { cout << "Stack Overflow"; return false; } else { a[++top] = x; // 填空:压入栈顶 return true; }}int Stack::pop() { if (top < 0) { cout << "Stack Underflow"; return 0; } else { int x = a[top--]; // 填空:弹出栈顶 return x; }}bool Stack::isEmpty() { return top < 0;}int main() { Stack s; s.push(10); s.push(20); s.push(30); cout << s.pop() << " Popped from stack\n"; return 0;}
cpp
#include <iostream>#define MAX 1000using namespace std;class Queue { int front, rear, size; unsigned capacity; int* array; public: Queue(unsigned capacity) { this->capacity = capacity; front = size = 0; rear = capacity - 1; array = new int[capacity]; } bool isFull(); bool isEmpty(); void enqueue(int item); int dequeue();};bool Queue::isFull() { return size == capacity;}bool Queue::isEmpty() { return size == 0;}void Queue::enqueue(int item) { if (isFull()) return; rear = (rear + 1) % capacity; array[rear] = item; size++;}int Queue::dequeue() { if (isEmpty()) return INT_MIN; int item = array[front]; front = (front + 1) % capacity; // 填空:更新队首指针 size--; return item;}int main() { Queue q(1000); q.enqueue(10); q.enqueue(20); q.enqueue(30); cout << q.dequeue() << " dequeued from queue\n"; return 0;}
cpp
#include <iostream>using namespace std;class Node {public: int data; Node* next; Node(int data) { this->data = data; next = nullptr; // 填空:初始化next指针 }};void printList(Node* n) { while (n != NULL) { cout << n->data << " "; n = n->next; }}int main() { Node* head = new Node(1); Node* second = new Node(2); Node* third = new Node(3); head->next = second; second->next = third; printList(head); return 0;}
cpp
#include <iostream>using namespace std;class Node {public: int data; Node* left; Node* right; Node(int data) { this->data = data; left = nullptr; // 填空:初始化左右子树 right = nullptr; }};void printInorder(Node* node) { if (node == NULL) return; printInorder(node->left); cout << node->data << " "; printInorder(node->right);}int main() { Node* root = new Node(1); root->left = new Node(2); root->right = new Node(3); root->left->left = new Node(4); root->left->right = new Node(5); printInorder(root); return 0;}
cpp
#include <iostream>using namespace std;class Node {public: int key; Node *left, *right; Node(int item) { key = item; left = right = NULL; }};Node* insert(Node* node, int key) { if (node == NULL) return new Node(key); if (key < node->key) { node->left = insert(node->left, key); } else if (key > node->key) { node->right = insert(node->right, key); // 填空:递归插入右子树 } return node;}void inorder(Node* root) { if (root != NULL) { inorder(root->left); cout << root->key << " "; inorder(root->right); }}int main() { Node* root = NULL; root = insert(root, 50); insert(root, 30); insert(root, 20); insert(root, 40); insert(root, 70); insert(root, 60); insert(root, 80); inorder(root); return 0;}
cpp
#include <iostream>#include <algorithm>using namespace std;struct Activity { int start, finish;};bool activityCompare(Activity s1, Activity s2) { return s1.finish < s2.finish; // 填空:按结束时间排序}void printMaxActivities(Activity arr[], int n) { sort(arr, arr+n, activityCompare); int i = 0; cout << "Selected activities: " << arr[i].start << ", " << arr[i].finish << endl; for (int j = 1; j < n; j++) { if (arr[j].start >= arr[i].finish) { // 填空:判断活动是否兼容 cout << arr[j].start << ", " << arr[j].finish << endl; i = j; } }}int main() { Activity arr[] = {{5, 9}, {1, 2}, {3, 4}, {0, 6}, {5, 7}, {8, 9}}; int n = sizeof(arr)/sizeof(arr[0]); printMaxActivities(arr, n); return 0;}
cpp
#include <iostream>#include <vector>#include <algorithm>using namespace std;vector<int> coinChange(int coins[], int n, int amount) { sort(coins, coins+n, greater<int>()); vector<int> result; for (int i = 0; i < n; i++) { while (amount >= coins[i]) { // 填空:使用当前硬币的条件 amount -= coins[i]; result.push_back(coins[i]); } } return result;}int main() { int coins[] = {1, 2, 5, 10, 20, 50, 100, 500, 1000}; int n = sizeof(coins)/sizeof(coins[0]); int amount = 93; vector<int> result = coinChange(coins, n, amount); for (int coin : result) { cout << coin << " "; } return 0;}
cpp
#include <iostream>#include <queue>#include <vector>using namespace std;struct Node { char data; unsigned freq; Node *left, *right; Node(char data, unsigned freq) { left = right = NULL; this->data = data; this->freq = freq; }};struct compare { bool operator()(Node* l, Node* r) { return l->freq > r->freq; // 填空:比较频率 }};void printCodes(Node* root, string str) { if (!root) return; if (root->data != '$') { cout << root->data << ": " << str << "\n"; } printCodes(root->left, str + "0"); printCodes(root->right, str + "1");}void HuffmanCodes(char data[], int freq[], int size) { priority_queue<Node*, vector<Node*>, compare> minHeap; for (int i = 0; i < size; i++) { minHeap.push(new Node(data[i], freq[i])); } while (minHeap.size() != 1) { Node *left = minHeap.top(); minHeap.pop(); Node *right = minHeap.top(); minHeap.pop(); Node *top = new Node('$', left->freq + right->freq); top->left = left; top->right = right; minHeap.push(top); } printCodes(minHeap.top(), "");}int main() { char arr[] = {'a', 'b', 'c', 'd', 'e', 'f'}; int freq[] = {5, 9, 12, 13, 16, 45}; int size = sizeof(arr)/sizeof(arr[0]); HuffmanCodes(arr, freq, size); return 0;}
cpp
#include <iostream>#include <algorithm>using namespace std;struct Item { int value, weight; Item(int value, int weight) : value(value), weight(weight) {}};bool cmp(Item a, Item b) { double r1 = (double)a.value / a.weight; double r2 = (double)b.value / b.weight; return r1 > r2; // 填空:按价值密度排序}double fractionalKnapsack(int W, Item arr[], int n) { sort(arr, arr+n, cmp); int curWeight = 0; double finalValue = 0.0; for (int i = 0; i < n; i++) { if (curWeight + arr[i].weight <= W) { curWeight += arr[i].weight; finalValue += arr[i].value; } else { int remain = W - curWeight; finalValue += arr[i].value * ((double)remain / arr[i].weight); break; } } return finalValue;}int main() { int W = 50; Item arr[] = {{60, 10}, {100, 20}, {120, 30}}; int n = sizeof(arr)/sizeof(arr[0]); cout << "Maximum value: " << fractionalKnapsack(W, arr, n); return 0;}
cpp
#include <iostream>#include <algorithm>#include <vector>using namespace std;struct Task { int id, deadline, profit;};bool comparison(Task a, Task b) { return a.profit > b.profit; // 填空:按利润降序排序}void scheduleTasks(Task arr[], int n) { sort(arr, arr+n, comparison); vector<bool> slot(n, false); vector<int> result(n, -1); for (int i = 0; i < n; i++) { for (int j = min(n, arr[i].deadline)-1; j >= 0; j--) { if (!slot[j]) { result[j] = i; slot[j] = true; break; } } } for (int i = 0; i < n; i++) { if (slot[i]) { cout << arr[result[i]].id << " "; } }}int main() { Task arr[] = {{1, 2, 100}, {2, 1, 19}, {3, 2, 27}, {4, 1, 25}, {5, 3, 15}}; int n = sizeof(arr)/sizeof(arr[0]); scheduleTasks(arr, n); return 0;}
cpp
#include <iostream>using namespace std;void merge(int arr[], int l, int m, int r) { int n1 = m - l + 1; int n2 = r - m; int L[n1], R[n2]; for (int i = 0; i < n1; i++) L[i] = arr[l + i]; for (int j = 0; j < n2; j++) R[j] = arr[m + 1 + j]; int i = 0, j = 0, k = l; while (i < n1 && j < n2) { if (L[i] <= R[j]) { arr[k] = L[i]; i++; } else { arr[k] = R[j]; // 填空:合并右半部分 j++; } k++; } while (i < n1) arr[k++] = L[i++]; while (j < n2) arr[k++] = R[j++];}void mergeSort(int arr[], int l, int r) { if (l < r) { int m = l + (r - l) / 2; mergeSort(arr, l, m); mergeSort(arr, m+1, r); merge(arr, l, m, r); }}int main() { int arr[] = {12, 11, 13, 5, 6, 7}; int n = sizeof(arr)/sizeof(arr[0]); mergeSort(arr, 0, n-1); for (int i = 0; i < n; i++) cout << arr[i] << " "; return 0;}
cpp
#include <iostream>using namespace std;int partition(int arr[], int low, int high) { int pivot = arr[high]; int i = low - 1; for (int j = low; j < high; j++) { if (arr[j] < pivot) { i++; swap(arr[i], arr[j]); } } swap(arr[i+1], arr[high]); return i+1;}void quickSort(int arr[], int low, int high) { if (low < high) { int pi = partition(arr, low, high); quickSort(arr, low, pi-1); // 填空:递归排序左半部分 quickSort(arr, pi+1, high); }}int main() { int arr[] = {10, 7, 8, 9, 1, 5}; int n = sizeof(arr)/sizeof(arr[0]); quickSort(arr, 0, n-1); for (int i = 0; i < n; i++) cout << arr[i] << " "; return 0;}
cpp
#include <iostream>using namespace std;int binarySearch(int arr[], int l, int r, int x) { if (r >= l) { int mid = l + (r - l) / 2; if (arr[mid] == x) return mid; if (arr[mid] > x) return binarySearch(arr, l, mid-1, x); return binarySearch(arr, mid+1, r, x); // 填空:递归搜索右半部分 } return -1;}int main() { int arr[] = {2, 3, 4, 10, 40}; int n = sizeof(arr)/sizeof(arr[0]); int x = 10; int result = binarySearch(arr, 0, n-1, x); cout << "Element found at index " << result; return 0;}
cpp
#include <iostream>#include <climits>using namespace std;int maxCrossingSum(int arr[], int l, int m, int h) { int sum = 0; int left_sum = INT_MIN; for (int i = m; i >= l; i--) { sum += arr[i]; if (sum > left_sum) left_sum = sum; } sum = 0; int right_sum = INT_MIN; for (int i = m+1; i <= h; i++) { sum += arr[i]; if (sum > right_sum) right_sum = sum; } return left_sum + right_sum; // 填空:返回跨越中点的最大和}int maxSubArraySum(int arr[], int l, int h) { if (l == h) return arr[l]; int m = (l + h) / 2; return max(max(maxSubArraySum(arr, l, m), maxSubArraySum(arr, m+1, h)), maxCrossingSum(arr, l, m, h));}int main() { int arr[] = {-2, -5, 6, -2, -3, 1, 5, -6}; int n = sizeof(arr)/sizeof(arr[0]); int max_sum = maxSubArraySum(arr, 0, n-1); cout << "Maximum subarray sum is " << max_sum; return 0;}
cpp
#include <iostream>using namespace std;void multiply(int A[][2], int B[][2], int C[][2]) { for (int i = 0; i < 2; i++) { for (int j = 0; j < 2; j++) { C[i][j] = 0; for (int k = 0; k < 2; k++) { C[i][j] += A[i][k] * B[k][j]; // 填空:矩阵乘法计算 } } }}int main() { int A[2][2] = {{1, 2}, {3, 4}}; int B[2][2] = {{5, 6}, {7, 8}}; int C[2][2]; multiply(A, B, C); for (int i = 0; i < 2; i++) { for (int j = 0; j < 2; j++) { cout << C[i][j] << " "; } cout << endl; } return 0;}
版权声明:本文内容由互联网用户自发贡献,本站不拥有所有权,不承担相关法律责任。如果发现本站有涉嫌抄袭或者错误的内容,欢迎发送邮件至272813839@qq.com举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容或者修正错误的内容。
标签:
相关文章
英飞凌为自动驾驶(AD)和高级驾驶辅助系统(ADAS)提供从微控制器、传感器到功率半导体的一站式解决方案,特别是在安全关键系统领域确立了行业标杆地位。
2025-07-08
最新资讯
英飞凌在BMS方面的解决方案
英飞凌电子油泵应用 TLE9891 MCU 和 TLE5501 角度传感器
CSP-J初赛程序阅读填空题
英飞凌(Infineon)可控硅模块,双向可控硅(TRIAC)600A/1600V
储能BMS的功率器件
100道CSP-J/S第一轮考试的计算机基础知识选择题及答案解析
汽车电子油泵控制板,英飞凌(Infineon)MCU TLE9891QTA61 配套的芯片
C++算法程序填空题(CSP-J/S考试专项练习)
英飞凌TC275是AURIX™系列中的一款高性能车规级三核微控制器
英飞凌(Infineon)汽车级微控制器(MCU)