Problem Statement | |||||||||||||
There are numMales males and numFemales females arranged in a circle. Starting from a given point, you count clockwise and remove theK'th person from the circle (where K=1 is the person at the current point, K=2 is the next person in the clockwise direction, etc...). After removing that person, the next person in the clockwise direction becomes the new starting point. After repeating this procedure numFemales times, there are no females left in the circle. Given numMales, numFemales and K, your task is to return what the initial arrangement of people in the circle must have been, starting from the starting point and in clockwise order. For example, if there are 5 males and 3 females and you remove every second person, your return String will be "MFMFMFMM". | |||||||||||||
Definition | |||||||||||||
| |||||||||||||
Constraints | |||||||||||||
- | numMales is between 0 and 25 inclusive | ||||||||||||
- | numFemales is between 0 and 25 inclusive | ||||||||||||
- | K is between 1 and 1000 inclusive | ||||||||||||
Examples | |||||||||||||
0) | |||||||||||||
| |||||||||||||
1) | |||||||||||||
| |||||||||||||
2) | |||||||||||||
| |||||||||||||
3) | |||||||||||||
| |||||||||||||
4) | |||||||||||||
|
This problem statement is the exclusive and proprietary property of TopCoder, Inc. Any unauthorized use or reproduction of this information without the prior written consent of TopCoder, Inc. is strictly prohibited. (c)2003, TopCoder, Inc. All rights reserved.
这道题又超过一个小时了,,题目不难,,中间调BUG调了很久,,,终于系统测试通过,之前做出来,有些边缘测试没做好。
public class PeopleCircle {
public String order(int numMales, int numFemales, int K) {
int sum = numMales + numFemales;
int step = K;
int arrays[] = new int[sum];
int i = 0;
if (numMales + numFemales == 0) {
return "";
}
while (true) {
if (numFemales == 0) {
break;
}
if (i == sum)
i = 0;
if (step == 1) {
if (arrays[i] == 0) {
if (numFemales == 0) {
break;
}
arrays[i] = 1;
step = K;
numFemales--;
}
} else {
if (arrays[i] == 0)
step--;
}
i++;
}
StringBuilder sb = new StringBuilder();
for (int k = 0; k < sum; k++)
sb.append(arrays[k] == 0 ? "M" : "F");
return sb.toString();
}
}