对于电梯的要求:电梯在一楼出发,待用户输完想停的楼层后,停在其中的一层楼然后所有人下去徒步找各自的目标地,使最后所有人的爬楼梯数最短。
设最后停在i层,i层下有n1个人,i层有n2个人,i+1层有n3个人,假设停i层为最短Y,若停在i-1层则Y-(n1-n2-n3)停在i+1层则Y-(n3-n1-n2)则n1>n2+n3停在i-1层,n3>n1+n2则电梯停在i+1层合算其余停i。
1 //电梯算法 2 #include<iostream> 3 using namespace std; 4 5 int main() 6 { 7 int people[10]; 8 int i; 9 int n1 = 0; 10 int n2; 11 int n3 = 0; 12 /*int sum;*/ 13 for (i = 0; i < 10; i++) 14 { 15 cin >> people[i]; 16 /* sum += people[i];*/ 17 } 18 n2 = people[0]; 19 for (i = 1; i <= 9; i++) 20 { 21 n3 += people[i]; 22 } 23 for (i = 0; i < 10; i++) 24 { 25 if (n3 > n1 + n2) 26 { 27 n1 = n1 + n2; 28 n2 = people[i + 1]; 29 n3 -= people[i + 1]; 30 } 31 else 32 { 33 cout << "要停在"; 34 cout << i + 1; 35 break; 36 } 37 } 38 39 40 return 0; 41 }
时间复杂度o(n)的算法优化了,却是我思维僵化了,本算法在老师的帮助下想出的。
时间: 2024-11-05 13:27:30