fork download
  1. #include <iostream>
  2. #include <string>
  3. #include <limits>
  4.  
  5. bool inputNumber(int &n)
  6. {
  7. std::cin >> n;
  8.  
  9. bool result = std::cin.good();
  10. if (!result) {
  11. std::cin.clear();
  12. std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
  13. }
  14. return result;
  15. }
  16.  
  17. int main(void)
  18. {
  19. const int numPlayer = 2;
  20. const int numInitialStone = 15;
  21.  
  22. std::string playerName[numPlayer];
  23.  
  24. // 同じ名前が入力されることは考慮していない
  25. for (int i = 0; i < numPlayer; ++i) {
  26. std::cout << "プレイヤー" << (i + 1) << "の名前を入力:";
  27. std::cin >> playerName[i];
  28. std::cout << "[LOG]playerName[" << i << "] = " << playerName[i] << std::endl;
  29. }
  30.  
  31. int turn = 0;
  32. int numStone = numInitialStone;
  33.  
  34. while (numStone != 0) {
  35. int numTakingStone;
  36. std::cout << playerName[turn] << "さん残りは" << numStone << "個、何個とりますか:";
  37. if (!inputNumber(numTakingStone)) {
  38. continue;
  39. }
  40. if (numTakingStone < 1 || 3 < numTakingStone) {
  41. continue;
  42. }
  43. if (numTakingStone > numStone) {
  44. continue;
  45. }
  46. std::cout << "[LOG]numTakingStone = " << numTakingStone << std::endl;
  47.  
  48. numStone -= numTakingStone;
  49. if (numStone == 0) {
  50. std::cout << playerName[turn] << "さん、あなたの負けです。" << std::endl;
  51. }
  52.  
  53. turn = (turn + 1) % numPlayer;
  54. }
  55.  
  56. return 0;
  57. }
  58.  
Success #stdin #stdout 0s 3036KB
stdin
Alice
Bob
0
2
-1
1
3
99999999999999999
2
2
3
1
4
1
stdout
プレイヤー1の名前を入力:[LOG]playerName[0] = Alice
プレイヤー2の名前を入力:[LOG]playerName[1] = Bob
Aliceさん残りは15個、何個とりますか:Aliceさん残りは15個、何個とりますか:[LOG]numTakingStone = 2
Bobさん残りは13個、何個とりますか:Bobさん残りは13個、何個とりますか:[LOG]numTakingStone = 1
Aliceさん残りは12個、何個とりますか:[LOG]numTakingStone = 3
Bobさん残りは9個、何個とりますか:Bobさん残りは9個、何個とりますか:[LOG]numTakingStone = 2
Aliceさん残りは7個、何個とりますか:[LOG]numTakingStone = 2
Bobさん残りは5個、何個とりますか:[LOG]numTakingStone = 3
Aliceさん残りは2個、何個とりますか:[LOG]numTakingStone = 1
Bobさん残りは1個、何個とりますか:Bobさん残りは1個、何個とりますか:[LOG]numTakingStone = 1
Bobさん、あなたの負けです。