描述
给定n(n是偶数,且n≤100)个正整数,所有正整数均≤10000;从前往后依次遍历这个数组,每两个为一组进行处理,若一组中的两个元素恰好一个为奇数,一个为偶数,则交换这两个元素的位置;否则不动;全部处理完成后,逆序输出整个数组。
例如给定序列: 62 12 25 55 , 处理完成后得到:55 25 12 62
给定序列: 6 7 3 4 ,处理完成后得到:3 4 6 7
给定序列: 68 71 99 12 19 23 , 处理完成后得到:23 19 99 12 68 71
给定序列:2 79 27 72 54 63 23 61 , 处理完成后得到:61 23 54 63 27 72 2 79
格式
输入格式
输入为两行。第一行是一个正整数n,表示有多少个数据。第二行是n个正整数组成的序列。
输出格式
输出一行n个正整数,是上述序列处理之后的结果。
样例
输入样例
10
46 70 22 83 12 43 32 36 25 22
输出样例
25 22 36 32 12 43 22 83 70 46
#include <stdio.h>
#define N 100
int main()
{
int n;
int a[N];
scanf("%d", &n);
for (int i = 0; i < n; i++)
scanf("%d", &a[i]);
for (int i = 0; i < n; i += 2)
{
if ((a[i] + a[i + 1]) % 2 != 0)
{
int t = a[i];
a[i] = a[i + 1];
a[i + 1] = t;
}
}
for (int i = n - 1; i >= 0; i--)
printf("%d ", a[i]);
return 0;
}
供参考:
#include <stdio.h>
#define N 101
int main()
{
int a[N], n, i, t;
do {
scanf("%d", &n);
} while (n > 100 || n % 2 != 0);
for (i = 0; i < n; i++)
{
scanf("%d", &a[i]);
if (i % 2 == 1) {
if (a[i - 1] % 2 != a[i] % 2) {
t = a[i - 1]; a[i - 1] = a[i]; a[i] = t;
}
}
}
for (i = n - 1; i >= 0; i--)
printf("%5d", a[i]);
return 0;
}
直接for循环就可以啊,判断是否一奇一偶可以这样i%2==0&&i+1%2==0
#include <stdio.h>
void print(int arr[],int n)
{
//……(打印数组)
int j;
for(j=0;j<n;j++)
{
printf("%d ",arr[j]);
}
printf("\n");
}
void reverse(int arr[],int n)
{
int left = 0;
int right = n-1;
int j;
for(j=0;j<n/2;j++)
{
int tem=arr[left];
arr[left]=arr[right];
arr[right]=tem;
left++;right--;
}
//……(实现数组转置)
}
void fun(int t[],int n)
{
int j;
for(j=0;j<n-1;j+=2)
{
if((t[j]%2==0&&t[j+1]%2!=0)||(t[j]%2!=0&&t[j+1]%2==0))
{
int tem=t[j];
t[j]=t[j+1];
t[j+1]=tem;
}
}
}
int main()
{
int n;
scanf("%d",&n);
int arr[n];
int j;
for(j=0;j<10;j++)
{
scanf("%d",&arr[j]);
}
int sz=n;
fun(arr,sz);
reverse(arr,sz);// ……(调用转置函数reverse)
print(arr,sz);// …… (调用打印函数print)
return 0;
}