
好吧 给你。又简单 又容易理解。呵呵
#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个整数到一个一维数组中,奇数从小到大排列,偶数从大到小排列,输出排好后得数组。等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)