代码如下:
#include
<
iostream
>
using namespace std ;
const int N = 10 ;
int person[N + 1 ] = {0 , 2 , 5 , 7 , 3 , 5 , 2 , 6, 2 , 6 , 3} ;
int floor2()
{
//先计算出在第一层停止的时候 所需要的花费
int T = 0;
int N1 = 0 ; //在第一层以下下的人数
int N2 = person[1] ; //在第一层处下的人数
int N3 = 0 ; //在第一层之上下电梯的人数
int floor = 1 ;
for(int i = 2 ; i <= N ;i++) //先计算出第1层停止需要爬取的楼层数目
{
T += person[i] * (i - 1) ;
N3 += person[i] ;
}
for(int i = 2 ; i <= N ;i++)
{
if(N1 + N2 <= N3) //说明第i+1层的结果会大于第i层
{
T += N1 + N2 - N3 ;
N1 += N2 ;
N2 = person[i] ;
N3 -= person[i] ;
floor = i ;
}
else //否则第i层的结果已经最小,故不需要计算第i+1层
break ;
}
return floor ;
}
int floor1() // 使用简单算法计算
{
int tempfloor = 0 ;
int min = 6553 ;//存储最小值
int floor = 1 ;//存储停靠的楼层
int i , j ;
for( i = 1 ; i <= N ;i++) //表示第i楼层电梯停靠
{
tempfloor = 0 ;
for( j = 1 ; j < i ;j++)
tempfloor += (i - j) * person[j] ;
for(j = i + 1 ; j <= N ; j++)
tempfloor += (j - i) * person[j] ;
if(min > tempfloor)
{
min = tempfloor ;
floor = i ;
}
// cout<<"tempfloor"<<i<<":"<<tempfloor<<endl;
}
return floor ;
}
int main()
{
int temp1 = floor1() ;
int temp2 = floor2() ;
cout<<temp1<<" "<<temp2<<endl ;
getchar() ;
return 0 ;
}
using namespace std ;
const int N = 10 ;
int person[N + 1 ] = {0 , 2 , 5 , 7 , 3 , 5 , 2 , 6, 2 , 6 , 3} ;
int floor2()
{
//先计算出在第一层停止的时候 所需要的花费
int T = 0;
int N1 = 0 ; //在第一层以下下的人数
int N2 = person[1] ; //在第一层处下的人数
int N3 = 0 ; //在第一层之上下电梯的人数
int floor = 1 ;
for(int i = 2 ; i <= N ;i++) //先计算出第1层停止需要爬取的楼层数目
{
T += person[i] * (i - 1) ;
N3 += person[i] ;
}
for(int i = 2 ; i <= N ;i++)
{
if(N1 + N2 <= N3) //说明第i+1层的结果会大于第i层
{
T += N1 + N2 - N3 ;
N1 += N2 ;
N2 = person[i] ;
N3 -= person[i] ;
floor = i ;
}
else //否则第i层的结果已经最小,故不需要计算第i+1层
break ;
}
return floor ;
}
int floor1() // 使用简单算法计算
{
int tempfloor = 0 ;
int min = 6553 ;//存储最小值
int floor = 1 ;//存储停靠的楼层
int i , j ;
for( i = 1 ; i <= N ;i++) //表示第i楼层电梯停靠
{
tempfloor = 0 ;
for( j = 1 ; j < i ;j++)
tempfloor += (i - j) * person[j] ;
for(j = i + 1 ; j <= N ; j++)
tempfloor += (j - i) * person[j] ;
if(min > tempfloor)
{
min = tempfloor ;
floor = i ;
}
// cout<<"tempfloor"<<i<<":"<<tempfloor<<endl;
}
return floor ;
}
int main()
{
int temp1 = floor1() ;
int temp2 = floor2() ;
cout<<temp1<<" "<<temp2<<endl ;
getchar() ;
return 0 ;
}