人过河 问题

来源:互联网 发布:初学者买哪款单片机好 编辑:程序博客网 时间:2024/05/19 18:41

 有一群人 在河的另一面  只有一只船  船多可以承载两个人 每人过河的时间不一样 若两人一起过 按最长的时间计算  问 需要最少需要花费多长时间?</p><p> ex:</p   input   4
       1  2  5 10    
output 17 
   思路   找出两个最小的 送过去
             返回用时最小的
            送出用时最大的两个 
             循环
 全部过完
#include<iostream>using namespace std;int a[100];int b[100];int time = 0;int num ;int count =0;//开出两最小的int  TransMin(){int i,max=0;    for(i=0;i<num;i++){         if(a[i] != 0) {                b[i] = a[i];  a[i] = 0;  i++;  break; }}while(i<num){if(a[i] != 0){max  = a[i];b[i] = a[i];a[i] = 0;break;}i++;}count++;return max;}//返回最小的int Backmin(){  int i,min=0;  for(i = 0; i<num; i++)  {      if(b[i] != 0)  {a[i] = b[i];    min  = b[i];b[i]=0;    break;  }  }  return min;}//开出两最大的int TransMax(){   int i,max=0;   for(i = num-1; i >=0; i--)   {   if(a[i] != 0)   {   max  = a[i];   b[i] = a[i];   a[i] = 0;   i--;   break;   }   }   while(i != -1)   {      if(a[i] != 0)  {          b[i] = a[i];  a[i] = 0;  break;  }  i--;   }   count++;   return max;}//判断数组是否满bool AEmpty(){int i,count=0;      for(i = 0; i<num; i++)  {          if(a[i] ==0)  { count++;  }  }  if (count == num)  {  return  true;  }  else  {  return false;  }}int main(){   cin>>num;   for (int i = 0 ; i<num; i++)   {      cin>>a[i];   }   while(!AEmpty())   {      time+=TransMin();  if(AEmpty())break;  time+=Backmin();      time+=TransMax();  if(AEmpty())break;  time+=Backmin();   }   cout<<count <<endl;   cout<<time<<endl;   return 0;}


             

0 0
原创粉丝点击