15 个解决方案
#1
#2
搜“倒推法”?
#3
能写个程序让我参考一下吗?
#5
#include <string>
#include <iostream>
class Game {
public:
void setAmounts();
int getAmounts();
static std::string runGame(Game &);
private:
int amounts;
};
void Game::setAmounts() {
std::cout << "Please set the amounts of stones:" << std::endl;
int amount;
std::cin >> amount;
this->amounts = amount;
}
void Game::setAmounts() {
std::cout << "Please set the amounts of stones:" << std::endl;
int amount;
std::cin >> amount;
this->amounts = amount;
}
int Game::getAmounts() {
return amounts;
}
std::string Game::runGame(Game &game){
game.setAmounts();
int amounts = game.getAmounts();
if (amounts >= 14) {
float temp = float((amounts - 13) % 15) / 2;
if (temp == 1 || temp == 2 || temp == 3 || temp == 4) {
return "Defeat";
}
else
return "Win";
}
else {
float temp = float(amounts) / 2;
if (temp == 1 || temp == 2 || temp == 3) {
return "Defeat";
}
else
return "Win";
}
}
int main() {
Game game;
std::string results = Game::runGame(game);
std::cout << results << std::endl;
return 0;
}
#6
没想到什么好的算法 楼主将就着看吧
#7
万分感谢!不过能麻烦您稍微给我讲下嘛?
我在算法这方面是真新手呀……
我在算法这方面是真新手呀……
#8
好像mod 15循环啊,mod15=0,2,4,6必败态吧
#9
石头总数超过13之后,是一个mod 15的循环,余数为2,4,6,8必败,其他都必赢,至于少于13个的情况,余数为2,4,6必败;应该有
通用算法,楼主可以继续研究下
#10
好像mod 15循环啊,mod15=0,2,4,6必败态吧
#11
万分感谢!不过能麻烦您稍微给我讲下嘛? 没想到什么好的算法 楼主将就着看吧
我在算法这方面是真新手呀……
石头总数超过13之后,是一个mod 15的循环,余数为2,4,6,8必败,其他都必赢,至于少于13个的情况,余数为2,4,6必败;应该有
通用算法,楼主可以继续研究下
#12
我只是在想,穷举法怎么弄。。。
#13
搜“倒推法”?
#14
参考4楼,4楼正解!
#15
我只是在想,穷举法怎么弄。。。
#1
#2
搜“倒推法”?
#3
搜“倒推法”?
能写个程序让我参考一下吗?
#4
#5
#include <string>
#include <iostream>
class Game {
public:
void setAmounts();
int getAmounts();
static std::string runGame(Game &);
private:
int amounts;
};
void Game::setAmounts() {
std::cout << "Please set the amounts of stones:" << std::endl;
int amount;
std::cin >> amount;
this->amounts = amount;
}
void Game::setAmounts() {
std::cout << "Please set the amounts of stones:" << std::endl;
int amount;
std::cin >> amount;
this->amounts = amount;
}
int Game::getAmounts() {
return amounts;
}
std::string Game::runGame(Game &game){
game.setAmounts();
int amounts = game.getAmounts();
if (amounts >= 14) {
float temp = float((amounts - 13) % 15) / 2;
if (temp == 1 || temp == 2 || temp == 3 || temp == 4) {
return "Defeat";
}
else
return "Win";
}
else {
float temp = float(amounts) / 2;
if (temp == 1 || temp == 2 || temp == 3) {
return "Defeat";
}
else
return "Win";
}
}
int main() {
Game game;
std::string results = Game::runGame(game);
std::cout << results << std::endl;
return 0;
}
#6
没想到什么好的算法 楼主将就着看吧
#7
没想到什么好的算法 楼主将就着看吧
我在算法这方面是真新手呀……
#8
好像mod 15循环啊,mod15=0,2,4,6必败态吧
#9
万分感谢!不过能麻烦您稍微给我讲下嘛? 没想到什么好的算法 楼主将就着看吧
我在算法这方面是真新手呀……
石头总数超过13之后,是一个mod 15的循环,余数为2,4,6,8必败,其他都必赢,至于少于13个的情况,余数为2,4,6必败;应该有
通用算法,楼主可以继续研究下
#10
好像mod 15循环啊,mod15=0,2,4,6必败态吧
#11
万分感谢!不过能麻烦您稍微给我讲下嘛? 没想到什么好的算法 楼主将就着看吧
我在算法这方面是真新手呀……
石头总数超过13之后,是一个mod 15的循环,余数为2,4,6,8必败,其他都必赢,至于少于13个的情况,余数为2,4,6必败;应该有
通用算法,楼主可以继续研究下
#12
我只是在想,穷举法怎么弄。。。
#13
搜“倒推法”?
#14
参考4楼,4楼正解!
#15
我只是在想,穷举法怎么弄。。。