Chinaunix首页 | 论坛 | 博客
  • 博客访问: 26881
  • 博文数量: 38
  • 博客积分: 2010
  • 博客等级: 大尉
  • 技术积分: 390
  • 用 户 组: 普通用户
  • 注册时间: 2010-05-29 22:54
文章分类

全部博文(38)

文章存档

2010年(38)

我的朋友
最近访客

分类: C/C++

2010-05-29 23:27:48

昨天
我编出了生成组合和逆序数
今天我上交了计算器并便出了even算法
感觉很high
于是做高数
发现第二型也开始会了
小事
就这么些小事
让我接近恢复正常了

依旧需要爱
但不再那么急切
依旧很脆弱
但不容易发火

我就是这么一个小事触发事件的人

#include <stdio.h>
#include <iostream>

using namespace std;

#define DIR_LEFT 0
#define DIR_RIGHT 1

#define NO_ACTIVE_NUMBER -1

typedef struct tagNumber
{
int ;
int direction;
} Number;

int findMaximumActiveNumber( Number *a , int n );
int findPPos( Number *a, int n, int p );

void main()
{
int n;
cout << "输入n: ";
cin >> n;
Number *a = new Number[ n ];

FILE *op = fopen( "生成排列.txt", "w" );

for ( int i = 0 ; i < n ; i++ )
{
a[ i ]. = i + 1;
a[ i ].direction = DIR_LEFT;
fprintf( op, "%d", a[i]. );
}
fprintf( op, "\n" );

while( findMaximumActiveNumber( a, n ) != NO_ACTIVE_NUMBER )
{
// 找出最大活动整数

int pos = findMaximumActiveNumber( a, n );
int m = a[ pos ].;

Number hold;
// 交换m和其相邻的整数

if ( a[ pos ].direction == DIR_LEFT && pos != 0 )
{
hold = a[ pos ];
a[ pos ] = a[ pos - 1 ];
a[ pos - 1 ] = hold;
}
else if ( a[ pos ].direction == DIR_RIGHT && pos != n-1 )
{
hold = a[ pos ];
a[ pos ] = a[ pos + 1 ];
a[ pos + 1 ] = hold;
}
// 交换所有p>m的p的方向

if ( m < n )
{
for ( int j = m + 1 ; j <= n ; j++ )
{
int p_pos = findPPos( a, n, j );

if ( a[ p_pos ].direction == DIR_LEFT )
a[ p_pos ].direction = DIR_RIGHT;
else
a[ p_pos ].direction = DIR_LEFT;
}
}
// 输出

for ( i = 0 ; i < n ; i++ )
fprintf( op, "%d", a[i]. );
fprintf( op, "\n" );
}

delete [] a;
}

int findMaximumActiveNumber( Number *a , int n )
{
int i;
int max = NO_ACTIVE_NUMBER;
int max_val = 1;

for ( i = 0 ; i < n ; i++ )
{
if ( i != 0 &&
a[ i ].direction == DIR_LEFT &&
a[ i ]. > a[ i-1 ]. &&
a[ i ]. > max_val )
{
max = i;
max_val = a[ i ].;
}
if ( i != n-1 &&
a[ i ].direction == DIR_RIGHT &&
a[ i ]. > a[ i+1 ]. &&
a[ i ]. > max_val )
{
max = i;
max_val = a[ i ].;
}
}

return max;
}

int findPPos( Number *a, int n, int p )
{
for ( int i = 0 ; i < n ; i++ )
if ( a[ i ]. == p )
return i;
}


阅读(182) | 评论(0) | 转发(0) |
0

上一篇:匪夷所思

下一篇:我们的使命

给主人留下些什么吧!~~