将一整数数列按奇数在前,偶数在后的顺序重新排放,并要求奇偶两部分都是升序排列。c++的。谢谢

将一整数数列按奇数在前,偶数在后的顺序重新排放,并要求奇偶两部分都是升序排列。c++的。谢谢,第1张

好吧 给你。又简单 又容易理解。呵呵

#include <iostream>

using namespace std;

int main()

{

int n; /要排列的个数 n/

cout<<"要排列的个数:";

cin>>n;

int a[100];

for(int i=0;i<100;i++)

{

a[i]=0;

}

cout<<'\n'<<"要排列的数,按空格间开:";

for(i=0;i<n;i++)

{

cin>>a[i];

}

//////////////////////////////////////////////////

/先把奇数放在前面,并且计算出奇数的个数 j 以便下面的排列。/

int j=0; /j 用来放奇数的个数。/

for(i=0;i<n;i++)

{

if(a[i]%2==1)

{

int temp;

temp=a[j];

a[j]=a[i];

a[i]=temp;

j++;

}

}

//////////////////////////////////////////////////

/先排列奇数/

for(i=0;i<j-1;i++)

for(int k=0;k<j-i-1;k++)

{

if(a[k]>a[k+1])

{

int temp;

temp=a[k+1];

a[k+1]=a[k];

a[k]=temp;

}

}

////////////////////////////////////////////////////

/再排列偶数/

for(i=j;i<n-2;i++)

for(int k=j;k<n-(i-j)-1;k++)

{

if(a[k]>a[k+1])

{

int temp;

temp=a[k+1];

a[k+1]=a[k];

a[k]=temp;

}

}

////////////////////////////////////////////////////

cout<<endl;

cout<<"排列后的顺序为:";

for(i=0;i<n;i++)

{

cout<<" "<<a[i];

}

cout<<endl;

return 0;

}

要理解奇偶排列首先要知道逆序数

一个大数排在小数的前面就叫一个逆序

比如排列32587

3的逆序数是0

2的逆序数是1

5的逆序数是0

8的逆序数是0

7的逆序数是1

然后这个排列的逆序数就是各个数字逆序数之总和:0+1+0+0+1=2为偶数,所以32587就是一个偶排列

奇排列类似,在一个序列的所有排列之中,奇偶排列各占一半

顺序排列:诸如123456789之类的就叫做顺序排列,其逆序数为0,

交换排列中的任意两个数,排列的奇偶性改变

奇排列需要变换奇数次才能变换到顺序排列,偶排列要变换偶数次才能变换到顺序排列

以下是我用C++写的:

#include <iostream>

using namespace std;

int main()

{

int a[10],i,j,tmp;

for(i = 0;i < 10 ;i++) //依次输入10个数

{

cout<<"请输入第"<<i+1<<"个数:";

cin>>a[i];

}

for(i = 0;i < 9;i++) //先从小到大排序

{

int p=i;

for(j=i+1;j<10;j++)

{

if(a[p]>=a[j])

{

p=j;

}

}

if(p != i)

{

tmp = a[i];

a[i] = a[p];

a[p] = tmp;

}

}

cout<<"奇数为:";

for(i = 0;i<10;i++)if(a[i]%2 != 0)cout<<a[i]<<" ";

cout<<endl;

cout<<"偶数为:";

for(i = 9;i>=0;i--)if(a[i]%2 == 0)cout<<a[i]<<" ";

cout<<endl;

return 0;

}

楼上讲那么多废话作什么?晕。

办法很简单:

在D1输入“奇”,D2输入“偶”(当然是随便输入都可以,只要不是序列就好),然后选中D1和D2下拉填充,再按D列排序,最后删除D列即可。

#include <stdioh>

#include <stdlibh>

srand();

int random(void)

{

int ret = (int)(1000rand()/(RAND_MAX+10));

while(ret < 10)

{

ret = (int)(1000rand()/(RAND_MAX+10));

}

return ret;

}

void creatArr(int arr)

{

int i = 0;

for(;i < 10;i++)

{

arr[i] = random();

}

}

void count(int arr)

{

int s = 0;

int d = 0;

int i = 0;

for(;i < 10;i++)

{

if(arr[i]%2)

s++;

else

d++;

}

printf("奇数有%d个\t偶数有%d个\n", s, d);

}

void SortPrint(int arr)

{

int i, j, tmp;

printf("排序后的数组为:\n");

for(i = 0;i < 10;i++)

{

for(j = (i - 1);j > 0;j--)

{

if(arr[j] > arr[j-1])

{

tmp = arr[j-1];

arr[j-1] = arr[j];

arr[j] = tmp;

}

}

}

for(i = 0;i < 10;i++)

{

printf(" %d\n", arr[9-i]);

}

}

int main()

{

int arr[10];

creatArr(arr); //用随机数填充数组

count(arr); //数奇偶数

SortPrint(arr); //冒泡法排序输出

return 0;

}

楼主直接粘锅去用,程序很简单,注释就不多写了,自己多多研究哦

假设所有的n!个排列中,奇排列数为a,偶排列数为b。

因为任意一个排列相邻的数对换一次,奇偶性改变。

把奇排列中相邻的两个数对换,于是得到一个对应的偶排列。

每个奇排列对对应一个偶排列,则有b>=a。

同理a>=b。

所以a=b。

线性代数

线性代数是数学的一个分支,它的研究对象是向量,向量空间(或称线性空间),线性变换和有限维的线性方程组。向量空间是现代数学的一个重要课题;因而,线性代数被广泛地应用于抽象代数和泛函分析中。

通过解析几何,线性代数得以被具体表示。线性代数的理论已被泛化为算子理论。由于科学研究中的非线性模型通常可以被近似为线性模型,使得线性代数被广泛地应用于自然科学和社会科学中。

对奇数行数值排序:=SMALL(IF(MOD(ROW($1:$18),2),A$1:A$18),ROW())

对奇数行数值排序在奇数行,偶数行空:=IF(MOD(ROW(),2),SMALL(IF(MOD(ROW($1:$18),2),A$1:A$18),INT(ROW(A2)/2)),"")

对所有数值排序在奇数行,偶数行空:=IF(MOD(ROW(),2),SMALL(A$1:A$7,INT(ROW(A2)/2)),"")

第1、2中公式为数组公式,三键结束。

以上就是关于将一整数数列按奇数在前,偶数在后的顺序重新排放,并要求奇偶两部分都是升序排列。c++的。谢谢全部的内容,包括:将一整数数列按奇数在前,偶数在后的顺序重新排放,并要求奇偶两部分都是升序排列。c++的。谢谢、什么是行列式的奇偶排列和顺序排列有何区别、编写一个程序,输入10个整数到一个一维数组中,奇数从小到大排列,偶数从大到小排列,输出排好后得数组。等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/9598361.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-30
下一篇2023-04-30

发表评论

登录后才能评论

评论列表(0条)

    保存