目录
MT1411·顺时针旋转数组
C language code implementation
#include <stdio.h>
void rotateArray(int array[], int N, int M) {
M = M % N; //计算有效反转次数
int result[N];
// 将最后M个元素放在新数组的开头
for (int i = 0; i < M; i++) {
result[i] = array[N - M + i];
}
// 将剩余元素移动到新数组的后面
for (int i = 0; i < N - M; i++) {
result[M + i] = array[i];
}
// 将新数组的内容复制到原数组
for (int i = 0; i < N; i++) {
array[i] = result[i];
}
}
int main() {
int N, M;
scanf("%d %d", &N, &M);
int array[N];
for (int i = 0; i < N; i++) {
scanf("%d", &array[i]);
}
rotateArray(array, N, M);
for (int i = 0; i < N; i++) {
printf("%d ", array[i]);
}
return 0;
}
MT1412·合并
C language code implementation
#include <stdio.h>
void merge_sorted_arrays(int A[], int sizeA, int B[], int sizeB, int C[]) {
int i = 0, j = 0, k = 0;
// merge two arrays
while (i < sizeA && j < sizeB) {
if (A[i] < B[j]) {
C[k++] = A[i++];
} else {
C[k++] = B[j++];
}
}
// 复制剩余的元素
while (i < sizeA) {
C[k++] = A[i++];
}
while (j < sizeB) {
C[k++] = B[j++];
}
}
int main() {
int N, M;
scanf("%d %d", &N, &M);
int arrayA[N], arrayB[M];
for (int i = 0; i < N; i++) {
scanf("%d", &arrayA[i]);
}
for (int i = 0; i < M; i++) {
scanf("%d", &arrayB[i]);
}
int arrayC[N + M];
merge_sorted_arrays(arrayA, N, arrayB, M, arrayC);
for (int i = 0; i < N + M; i++) {
printf("%d ", arrayC[i]);
}
return 0;
}
MT1413·并集
C language code implementation
#include <stdio.h>
#define MAX_SIZE 200 // A和B的最大长度总和
int main() {
int N, M;
int A[100], B[100]; // A和B的最大长度都是小于100
int unionArr[MAX_SIZE]; // 存放并集的数组
int unionCount = 0; // 并集的元素个数
// 输入数组长度N和M
scanf("%d %d", &N, &M);
// 输入数组A的元素
for (int i = 0; i < N; i++) {
scanf("%d", &A[i]);
}
// 输入数组B的元素
for (int i = 0; i < M; i++) {
scanf("%d", &B[i]);
}
// 构建并集
// 将A的元素加入并集
for (int i = 0; i < N; i++) {
// 检查是否已经在并集中
int found = 0;
for (int j = 0; j < unionCount; j++) {
if (A[i] == unionArr[j]) {
found = 1;
break;
}
}
// 如果没有找到,添加到并集中
if (!found) {
unionArr[unionCount++] = A[i];
}
}
// 将B的元素加入并集
for (int i = 0; i < M; i++) {
// 检查是否已经在并集中
int found = 0;
for (int j = 0; j < unionCount; j++) {
if (B[i] == unionArr[j]) {
found = 1;
break;
}
}
// 如果没有找到,添加到并集中
if (!found) {
unionArr[unionCount++] = B[i];
}
}
// 输出并集元素的个数
printf("%d", unionCount);
return 0;
}
MT1414·数组的交集
C language code implementation
#include <stdbool.h>
#include <stdio.h>
#define MAX_SIZE 100
int intersection_arrays(int A[], int sizeA, int B[], int sizeB) {
bool hashTable[MAX_SIZE] = {false}; // 哈希表 用于存储 a 元素
int count = 0;
// 将数组 a 的元素存入哈希表
for (int i = 0; i < sizeA; i++) {
if (A[i] >= 0 && A[i] < MAX_SIZE) {
hashTable[A[i]] = true; // 标记元素存在
}
}
for (int j = 0; j < sizeB; j++) {
if (B[j] >= 0 && B[j] < MAX_SIZE && hashTable[B[j]]) {
count++; // 计算交集的元素
hashTable[B[j]] = false; // 确保每个元素只计属于一次
}
}
return count; // 返回个数
}
int main() {
int n, m;
scanf("%d %d", &n, &m);
int arrayA[n], arrayB[m];
for (int i = 0; i < n; i++) {
scanf("%d", &arrayA[i]);
}
for (int i = 0; i < m; i++) {
scanf("%d", &arrayB[i]);
}
int count = intersection_arrays(arrayA, n, arrayB, m);
printf("%d", count);
return 0;
}
MT1415·大小相同
C language code implementation
#include <math.h>
#include <stdbool.h>
#include <stdio.h>
int main() {
int A[10] = {0};
bool iscount[10] = {false}; // 初始化为 false
int n, num = 0;
// 读取元素数量
scanf("%d", &n);
// 读取元素到数组中
for (int i = 0; i < n; i++) {
scanf("%d", &A[i]);
}
// 计算不同元素的非空子集数量
for (int i = 0; i < n; i++) {
if (iscount[i]) {
continue; // 如果已经计数过,跳过
}
int count = 1; // 开始计数当前元素
iscount[i] = true; // 标记当前元素为已计数
// 检查重复元素
for (int j = i + 1; j < n; j++) {
if (A[i] == A[j]) {
count++;
iscount[j] = true; // 标记重复元素为已计数
}
}
// 计算该元素的非空子集数量
num += (int)(pow(2, count) - 1);
}
// 输出结果
printf("%d\n", num);
return 0;
}
MT1416·最长子数组
C language code implementation
#include <stdio.h>
int main() {
int N, K;
int A[100]; // array size < 100
// input array size n and maximum allowed even elements K
scanf("%d %d", &N, &K);
// input array element
for (int i = 0; i < N; i++) {
scanf("%d", &A[i]);
}
int evenCount = 0; // count the number of even elements
int maxLength = 0; // the length of longest length array
for (int i = 0; i < N; i++) {
if (A[i] % 2 == 0) {
evenCount++; // if even numvber ++
}
if (evenCount > K) {
break;
}
maxLength = i + 1;
}
printf("%d\n", maxLength);
return 0;
}
MT1417·连续子序列
C language code implementation
#include <stdio.h>
int main() {
int N;
long long M;
int A[100];
scanf("%d %lld", &N, &M);
for (int i = 0; i < N; i++) {
scanf("%d", &A[i]);
}
// 计数
int count = 0;
// 遍历所有可能
for (int start = 0; start < N; start++) {
long long product = 1;
for (int end = start; end < N; end++) {
product *= A[end];
if (product > M) {
break;
}
count++;
}
}
printf("%d\n", count);
return 0;
}
MT1418·元素和
C language code implementation
#include <stdio.h>
int main() {
int length, sum = 0;
scanf("%d", &length);
int array[length];
for (int i = 0; i < length; i++) {
scanf("%d", &array[i]);
sum += array[i];
}
printf("%d", sum);
return 0;
}
MT1419·数组最值
C language code implementation
#include <stdio.h>
#include <limits.h> // 引入 limits.h 以使用 INT_MAX 和 INT_MIN
int main() {
int length;
int max = INT_MIN; // 初始化为最小整数
int min = INT_MAX; // 初始化为最大整数
// 输入数组长度
scanf("%d", &length);
int array[length];
// 输入数组元素
for (int i = 0; i < length; i++) {
scanf("%d", &array[i]);
}
// 遍历数组,找出最大值和最小值
for (int i = 0; i < length; i++) {
if (max < array[i]) {
max = array[i];
}
if (min > array[i]) {
min = array[i];
}
}
// 输出最大值和最小值
printf("%d %d\n", max, min);
return 0;
}
MT1420·中值
C language code implementation
#include <stdio.h>
void sort(int array[], int N) {
for (int i = 0; i < N - 1; i++) {
for (int j = 0; j < N - i - 1; j++) {
if (array[j] > array[j + 1]) {
int temp = array[j];
array[j] = array[j + 1];
array[j + 1] = temp;
}
}
}
}
int main() {
int N;
scanf("%d", &N);
int array[N];
for (int i = 0; i < N; i++) {
scanf("%d", &array[i]);
}
sort(array, N);
int median;
// 如果是偶数
if (N % 2 == 0) {
median = (array[N / 2 - 1] + array[N / 2]) / 2;
} else {
// 如果是奇数
median = array[N / 2];
}
printf("%d", median);
return 0;
}
标签:MT1411,scanf,元素,++,int,MT1420,数组,码题,array
From: https://blog.csdn.net/xinfanyyds/article/details/143464268