注册 登录
  • 欢迎访问开心洋葱网站,在线教程,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站,欢迎加入开心洋葱 QQ群
  • 为方便开心洋葱网用户,开心洋葱官网已经开启复制功能!
  • 欢迎访问开心洋葱网站,手机也能访问哦~欢迎加入开心洋葱多维思维学习平台 QQ群
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏开心洋葱吧~~~~~~~~~~~~~!
  • 由于近期流量激增,小站的ECS没能经的起亲们的访问,本站依然没有盈利,如果各位看如果觉着文字不错,还请看官给小站打个赏~~~~~~~~~~~~~!

C++代码片段:生成排列算法

OC/C/C++ 水墨上仙 2811次浏览 已收录 手机上查看

C++


#include<iostream>

using namespace std;
int num[10];
bool dir[10];
__int64 Array[3628805];
int find()//找出排列数中活跃的项
{
int Max=-1;
int index=-1;
for(int i=0;i<10;i++)
{
if(dir[num[i]]==1)
{
if(i!=0)
{
if(num[i]>num[i-1])
{
if(num[i]>Max)
{
Max=num[i];
index=i;
}
}
}
}else
{
if(i!=9)
{
if(num[i]>num[i+1])
{
if(num[i]>Max)
{
Max=num[i];
index=i;
}
}
}
}
}
return index;
}
void changedir(int n)//改变排列数方向
{
for(int i=n+1;i<10;i++)
dir[i]=!dir[i];
}
void Print(int cnt)//转换成整型
{
Array[cnt]=0;
for(int i=0;i<10;i++)
Array[cnt]=Array[cnt]*10+num[i];
}
int main()
{
freopen("out.txt","w",stdout);
for(int i=0;i<10;i++)
{
dir[i]=1;
num[i]=i;
}
int cnt=1;
while(1)
{
Print(cnt-1);
int index=find();
if(index==-1)//最后一个排列已经生成则返回-1 退出
break;
int N=num[index];
if(dir[N]==1)
swap(num[index],num[index-1]);
else
swap(num[index],num[index+1]);
changedir(N);//反转排列数中大于N的数方向
cnt++;
}
printf("cnt = %d\n",cnt);
for(int i=0;i<cnt;i++)
printf("%I64d\n",Array[i]);
return 0;
}


开心洋葱 , 版权所有丨如未注明 , 均为原创丨未经授权请勿修改 , 转载请注明C++代码片段:生成排列算法
喜欢 (0)
[开心洋葱]
分享 (0)
关于作者:
水墨上仙
……
加载中……