解题思路:
思路基本上分三步:
一、实现数组奇偶排序,使奇数在前,偶数在后。
此步骤难点在于如何让奇数全部靠前,所以我们需要双层循环,保证数组从第一个开始就是奇数,直到后面没有偶数为止。
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分
9 人评分
【蟠桃记】 (C语言代码)浏览:711 |
众数问题 (C语言代码)浏览:911 |
【偶数求和】 (C语言代码)浏览:588 |
The 3n + 1 problem (C语言代码)浏览:603 |
A+B for Input-Output Practice (VII) (C语言代码)浏览:566 |
简单的a+b (C语言代码)浏览:572 |
Tom数 (C语言代码)浏览:581 |
2006年春浙江省计算机等级考试二级C 编程题(2) (C语言代码)浏览:383 |
DNA (C语言代码)浏览:837 |
整除问题 (C语言代码)浏览:594 |