1.奇数偶数位置互换
//奇数偶数位置互换
#include <stdio.h>
//1 2 3 4 5 6 7 8 9 10
//1 9 3 7 5 6 4 8 2 10
void move_odd_even(int arr[], int sz)
{
int left = 0;
int right = sz-1;
while (left < right)
{
//从左向右找一个偶数,停下来
while ((left < right) && (arr[left] % 2 == 1))
{
left++;
}
//从右向左找一个奇数,停下来
while ((left < right) && arr[right] % 2 == 0)
{
right--;
}
//交换奇数和偶数
if (left < right)
{
int temp = arr[left];
arr[left] = arr[right];
arr[right] = temp;
}
}
}
int main()
{
int arr[10] = { 0 };
//输入
int i = 0;
int sz = sizeof(arr) / sizeof(arr[0]);
for (i = 0; i < sz; i++)
{
scanf("%d", &arr[i]);
}
//调整
move_odd_even(arr, sz);
//输出
for (i = 0; i < sz; i++)
{
printf("%d ", arr[i]);
}
return 0;
}
2.有序序列合并
描述:
输入两个升序排列的序列,将两个序列合并为一个有序序列并输出。
数据范围:1≤n, m ≤1000 ,序列中的值满足0≤val ≤30000
输入描述:
输入包含三行,
第一行包含两个正整数n, m,用空格分隔。n表示第二行第一个升序序列中数字的个数,m表示第三行第二个升序序列中数字的个数。
第二行包含n个整数,用空格分隔。
第三行包含m个整数,用空格分隔。
输出描述:
输出为一行,输出长度为n+m的升序序列,即长度为n的升序序列和长度为m的升序序列中的元素重新进行升序序列排列合并。
示例1
输入:5 6
1 3 7 9 22
2 8 10 17 33 44
输出:1 2 3 7 8 9 10 17 22 33 44
//合并两个有序链表
#include <stdio.h>
int main()
{
int n = 0;
int m = 0;
scanf("%d %d", &n, &m);
int arr1[n] ;//vs2022显示有误
int arr2[m] ;//问题暂未解决
//输入n个整数
int i = 0;
for (i = 0; i < n; i++)
{
scanf("%d", arr1[i]);
}
//输入m个整数
for (i = 0; i < m; i++)
{
scanf("%d", arr2[i]);
}
int j = 0;
int k = 0;
while (j < i && k < m)
{
if (arr1[j] < arr2[k])
{
printf("%d ", arr1[j]);
j++;
}
else
{
printf("%d ", arr2[k]);
k++;
}
if (j < n)
{
for (; j < n; j++)
{
printf("%d ", arr1[j]);
}
}
if (k < m)
{
for (; k < m; k++)
{
printf("%d ", arr2[k]);
}
}
}
return 0;
}