一个数组,找出其中具有这样一个特性的数字:1、比它左边的数都大2、比它右边的数都小

 #include <stdio.h>
#include <windows.h>
#include <time.h>

#define MAX 10
int InintArrary(int *arrary);
int FromLeft(int *arrary, int *fromLeftToRight);
int FromRight(int *arrary, int *fromRightToLeft);
int FindNumber(int *fromRightToLeft, int *fromLeftToRight, int *pos, int *find, int *num);
int PrintArrary(int *ar);

int main(int argc, char* argv[])
{
 int arrary[MAX] = {0};
    int fromLeftToRight[MAX] = {0};
 int fromRightToLeft[MAX] = {0};
 int pos[MAX] = {0};
 int find[MAX] = {0};
 int num = 0;
    int ret = 0;
    int flag = 1;

 int times = 0;
 while (flag == 1)
 {
  ret = InintArrary(arrary);
  ret = PrintArrary(arrary);
  
  ret = FromLeft(arrary, fromLeftToRight);
  //ret = PrintArrary(fromLeftToRight);
  
  ret = FromRight(arrary, fromRightToLeft);
  //ret = PrintArrary(fromRightToLeft);
  
  ret = FindNumber(fromRightToLeft, fromLeftToRight, pos, find, &num);
  if (num > 0)
  {
   for (int j=0; j<num; j++)
   {
    printf("position %d =%d  ", pos[j], find[j]);
   }
   flag = 0;
  }else
  {
   times++;
   printf("can not find! Try again for the %d times/n/n/n", times);       
  }
 }

 return 0;
}

int InintArrary(int *arrary)
{
 if (arrary == NULL)
 {
  return 0;
 }
 
 Sleep(1000);
 srand((unsigned)(time(NULL)));
 for (int i=0; i<MAX; i++)
 {
    
  arrary[i] = 1 + (int)(100*rand()/(RAND_MAX + 1.0));
 } 
 return 1;
}
 
int PrintArrary(int *ar)
{
    if (ar == NULL)
 {
  return 0;
 }

 for (int i=0; i<MAX; i++)
 {
  printf("arrary %d =%d  ", i, ar[i]);
  if (i%(MAX/10) == 0 && i != 0)
  {
   printf("/n");
   printf("/n");
   printf("/n");
  }
 }
 printf("/n");
 printf("/n");
 return 1;
}

int FromLeft(int *arrary, int *fromLeftToRight)
{
 if (arrary == NULL || fromLeftToRight == NULL)
 {
  return 0;
 }

 int currentMAX = arrary[0];
 fromLeftToRight[0] = arrary[0];

 for (int i=1; i<MAX; i++)
 {
  if (arrary[i] <= currentMAX)
  {
   fromLeftToRight[i] = currentMAX;
  }else
  {
   currentMAX = arrary[i];
   fromLeftToRight[i] = arrary[i];
  }
 }
 
 return 1;
}

int FromRight(int *arrary, int *fromRightToLeft)
{
 if (arrary == NULL || fromRightToLeft == NULL)
 {
  return 0;
 }

 int tail = MAX - 1;
 int currentMIN = arrary[tail];
 fromRightToLeft[tail] = arrary[tail];

 for (int i=tail-1; i>=0; i--)
 {
  if (arrary[i] >= currentMIN)
  {
   fromRightToLeft[i] = currentMIN;
  }else
  {
   currentMIN = arrary[i];
   fromRightToLeft[i] = arrary[i];
  }
 }

 return 1;
}

int FindNumber(int *fromRightToLeft, int *fromLeftToRight,
      int *pos, int *find, int *num)
{
 if (fromRightToLeft == NULL || fromLeftToRight == NULL ||
  pos == NULL || find == NULL)
 {
  return 0;
 }

 int count = 0;
 *num = 0;
 for (int i=0; i<MAX; i++)
 {
  if (fromLeftToRight[i] == fromRightToLeft[i])
  {
   pos[count] = i;
   find[count] = fromRightToLeft[i];
   count++;
   *num = *num + 1;
  }
 }

 if (count == 0)
 {
  return 0;
 }else
 {
  return 1;
 }
}

//没有贴成代码的形式,自己复制之后,到VC中用Alt+F8,可以看到整齐的代码了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值