妙解C语言——调整奇数偶数顺序
一.题目大致要求:
题目:调整奇数偶数顺序
内容:
调整数组使奇数全部都位于偶数前面。
要求:
输入一个整数数组,实现一个函数,
来调整该数组中数字的顺序使得数组中所有的奇数位于数组的前半部分,
所有偶数位于数组的后半部分。
二.算法思想:
- 首先我们可知题目要求我们输入一些数字,我们首先想到创建一个一维数组来存放数字。
- 其次我们来想想如何完成这一代码的实现。
我的思路是我们首先将数字放入数组中,并记录下数组中的数字奇数和偶数分别的个数将其存放到变量num_ji和num_ou中。
-
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
-
printf("请输入十个整数:\n");
-
for (int i = 0; i < 10; i )
-
{
-
scanf("%d", &arr[i]);
-
}
-
int len = sizeof(arr) / sizeof(arr[0]);
-
-
int num_ou = 0;
-
int num_ji = 0;
-
-
for (int j = 0; j < len; j )//计算输入的数组中的奇偶数分别的个数
-
{
-
if (arr[j] % 2 == 0)
-
{
-
num_ou ;
-
}
-
else
-
{
-
num_ji ;
-
}
-
}
其次我们编写一个函数来完成我们最终的目的:调整奇数偶数顺序
我们首先思考一下:
对于如上的一串数字我们可以类似于我们做排序时候的思想一样来遍历数组交换前后数字,而我们在这道题里面所需要的不是数字大小而是根据奇偶来交换由此我们想出了如果前一个数字是偶数后一个数字是奇数我们便交换他俩的位置,多次遍历交换便可以达到我们想要的效果。
-
for (i = 0; i < sz; i )
-
{
-
if (arr[i] % 2 == 0 && arr[i 1] % 2 == 1)
-
{
-
tmp = arr[i 1];
-
arr[i 1] = arr[i];
-
arr[i] = tmp;
-
-
}
-
}
上面的代码仅仅只是遍历一次数组,还达不到我们的预期因此我们需要外层多次循环来实现
在此给出整体函数实现和思想:
-
//传递函数四个参数分别是传递数组,数组总的元素个数,数组中奇数个数,数组中偶数个数
-
void hanshu(int* arr, int sz, int ji, int ou)
-
{
-
int i = 0;
-
int j = 0;
-
int k = 0;
-
int flog = 1;
-
int tmp = 0;
-
while (flog)
-
{
-
//一次while中遍历整个数组当偶数在前奇数在后时,交换偶数与奇数的位置
-
for (i = 0; i < sz; i )
-
{
-
if (arr[i] % 2 == 0 && arr[i 1] % 2 == 1)
-
{
-
tmp = arr[i 1];
-
arr[i 1] = arr[i];
-
arr[i] = tmp;
-
-
}
-
}
-
-
int count = 0;
-
//判断是否前面奇数个数的长度的位置全为奇数来终止while循环
-
for (int k = 0; k < ji; k )
-
{
-
if (arr[k] % 2 == 0)
-
{
-
break;
-
}
-
else
-
{
-
count ;
-
}
-
}
-
//当前面的数正好与输入的数字奇数个数匹配时就使得flog=0跳出while循环
-
if (count == ji)
-
{
-
flog = 0;
-
}
-
-
}
-
for (int n = 0; n < sz; n )
-
{
-
printf("%d ", arr[n]);
-
}
-
}
该函数便可以完成我们想要的效果
三.完整代码实现:
代码如下:
-
-
-
void hanshu(int* arr, int sz, int ji, int ou)
-
{
-
int i = 0;
-
int j = 0;
-
int k = 0;
-
int flog = 1;
-
int tmp = 0;
-
while (flog)
-
{
-
//一次while中遍历整个数组当偶数在前奇数在后时,交换偶数与奇数的位置
-
for (i = 0; i < sz; i )
-
{
-
if (arr[i] % 2 == 0 && arr[i 1] % 2 == 1)
-
{
-
tmp = arr[i 1];
-
arr[i 1] = arr[i];
-
arr[i] = tmp;
-
-
}
-
}
-
-
int count = 0;
-
//判断是否前面奇数个数的长度的位置全为奇数来终止while循环
-
for (int k = 0; k < ji; k )
-
{
-
if (arr[k] % 2 == 0)
-
{
-
break;
-
}
-
else
-
{
-
count ;
-
}
-
}
-
//当前面的数正好与输入的数字奇数个数匹配时就使得flog=0跳出while循环
-
if (count == ji)
-
{
-
flog = 0;
-
}
-
-
}
-
for (int n = 0; n < sz; n )
-
{
-
printf("%d ", arr[n]);
-
}
-
}
-
-
int main()
-
{
-
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
-
printf("请输入十个整数:\n");
-
for (int i = 0; i < 10; i )
-
{
-
scanf("%d", &arr[i]);
-
}
-
int len = sizeof(arr) / sizeof(arr[0]);
-
-
int num_ou = 0;
-
int num_ji = 0;
-
for (int j = 0; j < len; j )//计算输入的数组中的奇偶数分别的个数
-
{
-
if (arr[j] % 2 == 0)
-
{
-
num_ou ;
-
}
-
else
-
{
-
num_ji ;
-
}
-
}
-
hanshu(arr, len, num_ji, num_ou);
-
-
return 0;
-
}
今天的妙解C语言到此结束,希望以上内容对你解题有所帮助。别忘了一键三连哦。
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhgggehe
系列文章
更多
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01 -
怎样阻止微信小程序自动打开
PHP中文网 06-13