解题思路:
1. 初始化最大值: 将数组的第一个元素作为最初的最大值。
2. 遍历数组: 通过一个循环遍历数组中的每个元素。
3. 比较和更新: 在每次迭代中,比较当前元素与当前最大值。如果当前元素更大,则将其设为新的最大值。
4. 输出结果: 遍历完所有元素后,输出最大值。
#include
int main() {
int n, i;
printf("Enter the size of the array: ");
scanf("%d", &n);
int arr[n];
printf("Enter the elements: ");
for(i = 0; i < n; i++) {
scanf("%d", &arr[i]);
}
int max = arr[0];
for(i = 1; i < n; i++) {
if(arr[i] > max) {
max = arr[i];
}
}
printf("The largest element is %d\n", max);
return 0;
}
1. 求和: 初始化一个变量来存储元素总和,遍历数组并将每个元素的值加到总和中。
2. 计算平均值: 使用总和除以元素的数量来计算平均值。
3. 输出结果: 打印计算出的平均值。
#include
int main() {
int n, i, sum = 0;
printf("Enter the number of elements: ");
scanf("%d", &n);
int arr[n];
printf("Enter the elements: ");
for(i = 0; i < n; i++) {
scanf("%d", &arr[i]);
sum += arr[i];
}
printf("Average: %.2f\n", (float)sum/n);
return 0;
}
解题思路:
1. 逆向遍历: 从数组的最后一个元素开始向前遍历。
2. 打印元素: 在每次迭代中,打印当前元素。
3. 完成逆序: 直到数组的第一个元素被打印。
#include
int main() {
int n, i;
printf("Enter the size of the array: ");
scanf("%d", &n);
int arr[n];
printf("Enter the elements: ");
for(i = 0; i < n; i++) {
scanf("%d", &arr[i]);
}
printf("Array in reverse: ");
for(i = n-1; i >= 0; i--) {
printf("%d ", arr[i]);
}
printf("\n");
return 0;
}
解题思路:
1. 创建第二个数组: 初始化一个新数组,大小与原始数组相同。
2. 复制元素: 遍历原始数组,并将每个元素复制到新数组的对应位置。
3. 验证复制: 打印新数组以确保元素被正确复制。
#include
int main() {
int n, i;
printf("Enter the size of the arrays: ");
scanf("%d", &n);
int arr1[n], arr2[n];
printf("Enter elements of the first array: ");
for(i = 0; i < n; i++) {
scanf("%d", &arr1[i]);
arr2[i] = arr1[i];
}
printf("Second array: ");
for(i = 0; i < n; i++) {
printf("%d ", arr2[i]);
}
printf("\n");
return 0;
}
解题思路:
1. 两指针技巧: 使用两个指针,一个从前向后移动,另一个从后向前移动。
2. 交换元素: 当左指针指向偶数且右指针指向奇数时,交换这两个元素。
3. 继续移动: 移动指针直到它们相遇。
4. 结果: 此时数组被重新排列,所有奇数在前,所有偶数在后。
#include
void sortOddEven(int arr[], int n) {
int left = 0, right = n-1;
while(left < right) {
while(arr[left] % 2 != 0 && left < right) {
left++;
}
while(arr[right] % 2 == 0 && left < right) {
right--;
}
if(left < right) {
int temp = arr[left];
arr[left] = arr[right];
arr[right] = temp;
left++;
right--;
}
}
}
int main() {
int n, i;
printf("Enter the size of the array: ");
scanf("%d", &n);
int arr[n];
printf("Enter the elements: ");
for(i = 0; i < n; i++) {
scanf("%d", &arr[i]);
}
sortOddEven(arr, n);
printf("Array after separating odd and even numbers: ");
for(i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
printf("\n");
return 0;
}
解题思路:
1. 遍历数组: 从第一个元素开始,逐一检查每个元素。
2. 比较元素: 检查当前元素是否与要搜索的值匹配。
3. 返回结果: 如果找到匹配项,返回其位置。如果遍历结束都没找到,返回-1表示未找到。
#include
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, i;
printf("Enter the size of the array: ");
scanf("%d", &n);
int arr[n];
printf("Enter the elements: ");
for(i = 0; i < n; i++) {
scanf("%d", &arr[i]);
}
printf("Enter the element to search for: ");
scanf("%d", &x);
int result = linearSearch(arr, n, x);
if(result == -1) {
printf("Element not found\n");
} else {
printf("Element found at position: %d\n", result + 1);
}
return 0;
}
解题思路:
1. 查找元素: 遍历数组寻找要删除的元素。
2. 删除操作: 一旦找到,将该位置后的所有元素向前移动一个位置,覆盖要删除的元素。
3. 调整大小: 更新数组大小以排除已删除的元素。
4. 输出数组: 打印修改后的数组。
#include
int main() {
int n, x, i, j;
printf("Enter the size of the array: ");
scanf("%d", &n);
int arr[n];
printf("Enter the elements: ");
for(i = 0; i < n; i++) {
scanf("%d", &arr[i]);
}
printf("Enter the element to delete: ");
scanf("%d", &x);
for(i = 0; i < n; i++) {
if(arr[i] == x) {
for(j = i; j < n-1; j++) {
arr[j] = arr[j + 1];
}
n--;
i--;
}
}
printf("Array after deletion: ");
for(i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
printf("\n");
return 0;
}
解题思路:
1. 双指针方法: 一个指针在数组开始,另一个在结束。
2. 交换元素: 交换两指针所指向的元素,然后移动它们,一直到它们相遇或交叉。
3. 完整逆转: 完成后,整个数组将被逆转。
#include
void reverseArray(int arr[], int start, int end) {
while(start < end) {
int temp = arr[start];
arr[start] = arr[end];
arr[end] = temp;
start++;
end--;
}
}
int main() {
int n, i;
printf("Enter the size of the array: ");
scanf("%d", &n);
int arr[n];
printf("Enter the elements: ");
for(i = 0; i < n; i++) {
scanf("%d", &arr[i]);
}
reverseArray(arr, 0, n-1);
printf("Reversed array: ");
for(i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
printf("\n");
return 0;
}
解题思路:
1. 找到位置: 确定要插入新元素的位置。
2. 移动元素: 将该位置及之后的所有元素向后移动一个位置,为新元素腾出空间。
3. 插入元素: 在指定位置插入新元素。
4. 输出数组: 打印修改后的数组。
#include
int main() {
int n, i, pos, x;
printf("Enter the size of the array: ");
scanf("%d", &n);
int arr[n+1];
printf("Enter the elements: ");
for(i = 0; i < n; i++) {
scanf("%d", &arr[i]);
}
printf("Enter the position where you want to insert an element: ");
scanf("%d", &pos);
printf("Enter the value to insert: ");
scanf("%d", &x);
for(i = n; i >= pos; i--) {
arr[i] = arr[i - 1];
}
arr[pos - 1] = x;
printf("Array after insertion: ");
for(i = 0; i <= n; i++) {
printf("%d ", arr[i]);
}
printf("\n");
return 0;
}
题目10: 将一维数组向右旋转特定次数
解题思路:
1. 确定旋转次数: 如果旋转次数多于数组长度,计算等效的较小旋转次数。
2. 旋转操作: 创建一个新数组。对于每个位置,计算旋转后它应该处于的新位置,并将原数组中的元素移动到新位置。
3. 复制回原数组: 将旋转后的新数组复制回原数组。
4. 输出结果: 打印旋转后的数组。
#include
void rotateRight(int arr[], int n, int k) {
if(k > n) {
k = k % n;
}
int result[n];
for(int i = 0; i < n; i++) {
if(i < k) {
result[i] = arr[n + i - k];
} else {
result[i] = arr[i - k];
}
}
for(int i = 0; i < n; i++) {
arr[i] = result[i];
}
}
int main() {
int n, k, i;
printf("Enter the size of the array: ");
scanf("%d", &n);
int arr[n];
printf("Enter the elements: ");
for(i = 0; i < n; i++) {
scanf("%d", &arr[i]);
}
printf("Enter the number of times you want to rotate: ");
scanf("%d", &k);
rotateRight(arr, n, k);
printf("Array after rotation: ");
for(i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
printf("\n");
return 0;
}