解题思路:
思路基本上分三步:
一、实现数组奇偶排序,使奇数在前,偶数在后。
此步骤难点在于如何让奇数全部靠前,所以我们需要双层循环,保证数组从第一个开始就是奇数,直到后面没有偶数为止。
1、我们设两个变量i和k来控制循环。
2、i从0开始循环,如果i是奇数,就继续循环i。
3、如果它不是奇数,就需要用到k变量来循环从i+1开始,之后的所有数,挨个进行判断,直到遇到奇数,那么这个奇数就可以和i互换值。
4、退出k循环。
5、回到i循环中继续判断i是否是奇数。如果不是,回到3、4操作,如果是,继续判断,直到判断出i不是奇数,回到3、4操作。
二、实现奇数从大到小排序。(我用的是冒泡法,有更好的方法可以在程序中替换)
三、实现偶数从小到大排序。(同二)
注意事项:
参考代码:
#include <stdio.h>
void swap(int array[],int i,int k) //交换两值函数
{
array[i] = array[i] ^ array[k];
array[k] = array[k] ^ array[i];
array[i] = array[i] ^ array[k]; //这里也可以设一个变量temp做媒介,实现互换
}
int main(void)
{
int nums[10] = {0};
int i = 0,k = 0; //用作循环条件
while(i < 10)
{
scanf("%d",&nums[i++]); //输入数组
}
for(i = 0 ; i < 10 ; i++) //实现奇数在前,偶数在后
{
if(nums[i] % 2 != 0) continue;
for(k = i+1 ; k < 10 ; k++)
{
if(nums[k] % 2 != 0)
{
swap(nums,i,k);
break;
}
}
}
for(i = 0 ; i < 10 ; i++) //分别实现奇数、偶数排序
{
if(nums[i] % 2 != 0) //进行奇数排序
{
for(k = i+1 ; k < 10 ; k++)
{
if(nums[k] % 2 == 0) break; //出现第一个偶数,退出循环
if(nums[i] < nums[k])
{
swap(nums,i,k);
}
}
}
else //进行偶数排序
{
for(k = i+1 ; k < 10 ; k++)
{
if(nums[k] % 2 != 0) break; //出现第一个奇数,退出循环
if(nums[i] > nums[k])
{
swap(nums,i,k);
}
}
}
}
for(i = 0 ; i < 10 ; i++) //输出排序好的数组
{
printf("%d ",nums[i]);
}
return 0;
}
0.0分
1 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复