贪心法_数列极差问题

来源:互联网 发布:淘宝网新手开店入门 编辑:程序博客网 时间:2024/05/14 03:44

试题描述
在黑板上写了N个正整数作成的一个数列,进行如下操作:
每一次擦去其中的两个数a和b,然后在数列中加入一个数a×b+1,
如此下去直至黑板上剩下一个数,在所有按这种操作方式最后得到的数中,
最大的max,最小的为min,则该数列的极差定义为M=max-min。

编程任务
对于给定的数列,编程计算出极差M。


////////////////////////////////////////////////////////////
// http://blog.csdn.net/zerodspace/
// max_min.cpp
// 16:02 2005-10-25
////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "conio.h"
#include "stdlib.h"

#define maxNums 1024

void sort( int nums[] , int n , int max2min[] , int min2max[] )
{
 int i , j , t;
 int nmax , pmax;
 int nmin , pmin;
 for( i = 0 ; i < n ; i++ )
 {
  max2min[i] = nums[i];
  min2max[i] = nums[i];
 }
 for( i = 0 ; i < n - 1 ; i++ )
 {
  nmax = max2min[i];
  pmax = i;
  nmin = min2max[i];
  pmin = i;
  for( j = i + 1 ; j < n ; j++ )
  {
   if( nmax < max2min[j] )
   {
    nmax = max2min[j];
    pmax = j;
   }
   if( nmin > min2max[j] )
   {
    nmin = min2max[j];
    pmin = j;
   }
  }
  t = max2min[i];
  max2min[i] = max2min[pmax];
  max2min[pmax] = t;
  t = min2max[i];
  min2max[i] = min2max[pmin];
  min2max[pmin] = t;
 }
}
int max_min( int nums[] , int n )
{
 int nmax[maxNums];
 int nmin[maxNums];
 sort( nums , n , nmax , nmin );

 printf( "decrease order:/t" );
 for( int i = 0 ; i < n ; i++ )
  printf( "%3d" , nmax[i] );
 printf( "/n" );

 printf( "increase order:/t" );
 for( int i = 0 ; i < n ; i++ )
  printf( "%3d" , nmin[i] );
 printf( "/n" );

 for( int i = n - 1 ; i > 0 ; i-- )
 {
  nmax[i-1] = nmax[i-1] * nmax[i] + 1;
  int j = i - 1;
  while( j > 0 && nmax[j] > nmax[j-1] )
  {
   int t = nmax[j];
   nmax[j] = nmax[j-1];
   nmax[j-1] = t;
  }
 }
 for( int i = n - 1 ; i > 0 ; i-- )
 {
  nmin[i-1] = nmin[i-1] * nmin[i] + 1;
  int j = i - 1;
  while( j > 0 && nmin[j] > nmin[j-1] )
  {
   int t = nmin[j];
   nmin[j] = nmin[j-1];
   nmin[j-1] = t;
  }
 }
 printf( "max=%d/n" , nmax[0] );
 printf( "min=%d/n" , nmin[0] );

 return nmax[0]-nmin[0];

int _tmain(int argc, _TCHAR* argv[])
{
 int nums[] = { 1 , 5 , 3 , 7 };
 int n = 4;
 printf( "max-min=%d/n" , max_min( nums , n ) );

 getch();
 return 0;
}
////////////////////////////////////////////////////////////

原创粉丝点击