读书人

[2008-05-13]小弟我

发布时间: 2012-10-26 10:30:58 作者: rapoo

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

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

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

#include <stdio.h>#include <iostream>using namespace std;#define DIR_LEFT 0#define DIR_RIGHT 1#define NO_ACTIVE_NUMBER -1typedef 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;elsea[ 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;}

读书人网 >编程

热点推荐