1.调整数组使奇数全部都位于偶数前面。
输入一个整数数组,实现一个函数,来调整该数组中数字的顺序使得数组中所有的奇数位于数组的前半部分,所有偶数位于数组的后半部分。
void adjust_arr(int *arr, int num)
{
int *left = NULL, *right = NULL, *mid = NULL;
int tmp,i;
left = &arr[0];//left 指向数组元素最左边
right = &arr[num-1];// 指向数组元素最右边
while (left < right)
{
if (*left%2 == 0)
{
if(*right%2 == 0)
{
right --;
}
else
{
tmp = *left;
*left = *right;
*right = tmp;
}
}
else
{
left++;
}
}
}
int main()
{
int arr[NUM] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0};
int i = 0;
printf ("变换前:\n");
for (i=0; i<NUM; ++i)
{
printf ("%d ",arr[i]);
}
printf("\n");
adjust_arr(arr, NUM);
printf ("变换后:\n");
for (i=0; i<NUM; ++i)
{
printf ("%d ",arr[i]);
}
printf("\n");
system ("pause");
return 0;
}
/*
运行结果:
变换前:
1 2 3 4 5 6 7 8 9 0
变换后:
1 9 3 7 5 6 4 8 2 0
请按任意键继续. . .
*/
2. 杨氏矩阵
有一个二维数组.
数组的每行从左到右是递增的,每列从上到下是递增的. 在这样的数组中查找一个数字是否存在。
#include <stdio.h>
#include <stdlib.h>
int find_num(int arr[5][5], int k)
{
int i, j;
for (i=0; i<5; ++i)
{
for(j=0; j<5; ++j)
{
if(arr[i][j] == k || arr[j][i] == k)
{
return 1;
}
}
}
return 0;
}
int main()
{
int arr[5][5];
int i = 0, j = 0, key = 0;
for (i=0; i<5; ++i)
{
arr[0][i] = i;
}
for (i=1; i<5; ++i)
{
for (j=0; j<5; ++j)
{
arr[i][j] = arr[i-1][j] +1;
}
}
for(i=0; i<5; ++i)
{
for(j=0; j<5; ++j)
{
printf ("%d ",arr[i][j]);
}
printf ("\n");
}
scanf ("%d",&key);
i = find_num(arr,key);
if (i == 0)
{
printf ("%d不在数组中\n", key);
}
else
{
printf ("%d在数组中\n", key);
}
system ("pause");
return 0;
}