c语言中 排列偶数与奇数,奇数在后,偶数在前
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c语言中 排列偶数与奇数,奇数在后,偶数在前相关的知识,希望对你有一定的参考价值。
#include "stdio.h"
void main()
int i,j,k,m,o,a[10000];
printf("输入要输入数的个数\n");
scanf("%d",&o);
printf("输入数\n");
for(i=1;i<o+1;i++)
scanf("%d",&a[i]);
for(i=1,j=o;i<o+1;i++,j=o)
if(a[i]%2!=0)
do
k=a[j]%2;
j--;
while(k==0);
if(j>=i)
m=a[++j];
a[j]=a[i];
a[i]=m;
for(i=1;i<o+1;i++)
printf(" %d ",a[i]);
请问哪里有逻辑错误,怎么运行之后排序出问题
void main()
int i,j,k,m,o,a[10000];
printf("输入要输入数的个数\\n");
scanf("%d",&o);
printf("输入数\\n");
for(i=1;i<o+1;i++)
scanf("%d",&a[i]);
for(i=1,j=o;i<o+1;i++,j=o)
while (j >= 0 && (a[j] % 2) == 0)
j--;
if(j>=i)
m=a[j];
a[j]=a[i];
a[i]=m;
for(i=1;i<o+1;i++)
printf(" %d ",a[i]);
while (1);
这样就OK
这个是我写的
---------------------------------------------------
void sort(int *aa, int size)
int left, right, tmp;
left = 0;
right = size - 1;
for (; left < right; )
if ((aa[left] & 1))
left++;
continue;
if (!(aa[right] & 1))
right--;
continue;
tmp = aa[left];
aa[left] = aa[right];
aa[right] = tmp;
left++;
right--;
void main()
int i,j,k,m,o,a[10000];
printf("输入要输入数的个数\\n");
scanf("%d",&o);
printf("输入数\\n");
for(i=1;i<o+1;i++)
scanf("%d",&a[i]);
sort(a + 1, o);
for(i=1;i<o+1;i++)
printf(" %d ",a[i]);
while (1);
--------------------------------------------------
参考技术A #include<stdio.h>//主函数
#define
N
10
main()
int
A[10],B[10],i,j,p,s=0,h=5,k;//定义数组名与变量名
printf("输入十个数字、回车键确定:\n");
for
(i=0;i<10;i++)//遍历录入数组元素
scanf("%d",&A[i]);
for
(j=0;j<10;j++)//将偶数放在数组前面,奇数放在数组后面
p=A[j]%2;
if(p==0)
B[s]=A[j];
s++;
if(p==1)
B[h]=A[j];
h++;
printf("输出变换后的数组元素:\n");//遍历输出数组元素
for(k=0;k<10;k++)
printf("%d
",B[k]);
参考技术B #include <stdio.h>//主函数
#define N 10
main()
int A[10],B[10],i,j,p,s=0,h=5,k;//定义数组名与变量名
printf("输入十个数字、回车键确定:\n");
for (i=0;i<10;i++)//遍历录入数组元素
scanf("%d",&A[i]);
for (j=0;j<10;j++)//将偶数放在数组前面,奇数放在数组后面
p=A[j]%2;
if(p==0)
B[s]=A[j];
s++;
if(p==1)
B[h]=A[j];
h++;
printf("输出变换后的数组元素:\n");//遍历输出数组元素
for(k=0;k<10;k++)
printf("%d ",B[k]);
参考技术C #include "stdio.h"
#define N 10
void main()
int i=0,j=0;
int a[N];
int b[N];
printf("输入%d个整数:\n",N);
for(i=0;i<N;i++)
scanf("%d",&a[i]);
for(i=0;i<N;i++)
if(a[i]%2==0)
b[j]=a[i];
j++;
for(i=0;i<N;i++)
if(a[i]%2!=0)
b[j]=a[i];
j++;
ps:不要鄙视我的方法,虽然算法很简单,但是完成了任务,而且效率比较高,缺点是占用资源较多 参考技术D 你的do while语句有问题
#include "stdio.h"
void main()
int i,j,k,m,o,a[10];
printf("please input the number of digits\n");
scanf("%d",&o);
printf("they are:\n");
for(i=1;i<o+1;i++)
scanf("%d",&a[i]);
for(i=1,j=o;i<o+1;i++,j=o)
if(a[i]%2==1)
k=a[j]%2;
while(k==1)
j--;k=a[j]%2;
if(j>=i)
m=a[j];
a[j]=a[i];
a[i]=m;
for(i=1;i<o+1;i++)
printf("%d ",a[i]);
我给你改了一下你试试看是不是这个思路~本回答被提问者和网友采纳
奇数偶数排序技巧分析
给定10个整数的序列,要求对其重新排序。排序要求: 1.奇数在前,偶数在后; 2.奇数按从大到小排序; 3.偶数按从小到大排序。 技巧用法: 思路 :在设置两个数组,将奇数和偶数分别存储在这两个数组中,最后在将这两个数组按要求顺序输出,那么我们既要记录新数组中的元素,又要记录新数组中的元素个数。这里有一个技巧; int n=0;b[i],c[i] if(a[i]%2==1) ,b[++n]=a[i] 可一次性完成。。
以上是关于c语言中 排列偶数与奇数,奇数在后,偶数在前的主要内容,如果未能解决你的问题,请参考以下文章
输入 10 个整数,将这 10 个数按升序排列,并且奇数在前偶数在后?
用数组编写:将一整数数列按奇数在前、偶数在后的顺序重新排放,并要求奇偶数两部分分别有序
空瓶换水喝水问题?给一个数组,如何让奇数在前偶数在后?C语言从入门到入土(进阶篇)(算法篇p5)
使用TreeSet和Comparator,写TreeSetTest2 要求:对TreeSet中的元素1,2,3,4,5,6,7,8,9,10进行排列,排序逻辑为奇数在前偶数在后,奇数按照升序排列