#include "iostream" using namespace std; int main(void) { unsigned short ToEachHave[30]; unsigned short EachHave[30]; unsigned short NumOfGuest; while( (cin >> NumOfGuest) && NumOfGuest ) { unsigned short TotalOfMts = 0; for( size_t ix = 0 ; ix != NumOfGuest ; ix ++ ) { cin >> EachHave[ix]; TotalOfMts += EachHave[ix]; ToEachHave[ix] = TotalOfMts; } if( (TotalOfMts % 2) != 0) { cout << "No equal partitioning." << endl; } else { for( size_t id = 0 ; id != NumOfGuest ; id ++ ) { if( ToEachHave[id] == (TotalOfMts >> 1)) { cout << "Sam stops at position " << id + 1 << " and Ella stops at position " << id + 2 << "." << endl; break; } if(ToEachHave[id] > (TotalOfMts >> 1)) { cout << "No equal partitioning." << endl; break; } } } } return 0; }
既然最后要相等则必然可以凭借分成两份,也就是说总的肉丸数目为偶数才能均分,建立数组分别记录1-n号位分发的肉丸总数,一旦有刚好等于一半的则输出位置并且退出,若有一个值大于一半则输出不能满足任何退出。