- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
考虑我在 hackerrank 上发现的这个问题: Coins Problem
Alice and Bob were sitting in the sun; drinking orange juice; and watching some migrating ducks fly to Africa. “Look”, noted Alice, “one of the ducks left a trail of golden coins on the floor”. “Great!” exclaimed Bob, “let‟s play a game with this line of coins. We will take turns, where each one of us will flip one coin from „head‟ into „tail‟ state”. “Ok”, agreed Alice and added, “but when we flip a coin, we can also opt to flip the coin immediately after it, even if that coin is a „tail‟, in which case it becomes a „head‟”. “And whoever can not play - loses” cried both of them simultaneously. Cunning Bob knew that he could count on witty IEEEXtreme contestants to help him win. Can you help him do that? Task Your task is to write a program that given a string of H/T letters, computes a winning move for the flip-coin game, if there is one, or reports that there in no winning move, if this is the case. A winning move is a legal move such that either the player wins immediately (because there are no more coins to flip), or else, after any subsequent move by the opponent there is a winning move for the player.
例如,如果输入是 TTTT 那么 Bob 输了游戏(没有 “头”所以他不能玩,因此他输了)。对于输入 TTTTHTTTT, Bob 掷第五枚硬币获胜;对于输入 TTHHT,Bob 获胜 翻转两个“正面”(第三个和第四个硬币);对于输入 THHTTHHT,如果 Bob 掷硬币 2 和 3,他就赢了。
Input 要从控制台读取的输入文件包含一行 其中有一个完全由字母 H 和 T 组成的字符串, 代表代币的状态,如前所述。
Output 要在控制台写入的输出文件包含一个 行,有一个数字。正数 N 表示翻转第 N 个 硬币是一个获胜的举动。一个负数,写作-N,意味着 翻转第 N 和第 N+1 个硬币是获胜的一步。零,书面 0,表示没有必胜棋。请注意,一般情况下,有 对于给定的硬币列表,可以是几个获胜的 Action 。你的程序 可以输出其中任何一个。
我尝试了递归回溯解决方案,但是“C”由于 Stackoverflow 引发了段错误。这是我的代码:(部分有效)
#include <stdio.h>
int main()
{
char a[100];
scanf("%s",a);
printf("%d",check(a));
}
int check(char a[])
{
//printf("%s\n",a);
int i=0;
for(i=0;i<strlen(a);i++){
if(a[i]=='H'){
a[i]='T';
a[i+1]=a[i+1]=='H'?'T':'H';
if(check(a)){
a[i+1]=a[i+1]=='H'?'T':'H';
if(check(a))a[i]='H';
else return (i+1);
}
else return -(i+1);
}
}
//printf("Lost\n");
return 0;
}
谁能帮帮我?
最佳答案
您没有正确撤消您尝试的所有 Action 。如果你不撤消这些 Action ,你就永远无法原路返回。
此外,您正在从用作 bool 函数的 check
返回数字。
这是一个有效的示例。
#include <stdio.h>
#include <string.h>
//#define DEBUG(...) fprintf(stderr, __VA_ARGS__)
#define FLIP(x) ( ((x)=='H') ? 'T' : 'H' )
bool check(char* a) {
DEBUG("%s\n",a);
// Loop over the string.
for (int i=0; i<strlen(a); i++) {
// If this coin is a head, try flipping it.
if (a[i]=='H') {
// Try flipping just this coin.
a[i]=FLIP(a[i]);
// See if it is a win or a loss for the other player.
if (!check(a)) {
// A loss for the other player means a win for us!
// Undo our last move.
a[i]=FLIP(a[i]);
return true;
}
// A win for the other player.
// See if flipping the next coin makes a difference.
if (i+1 < strlen(a)) {
a[i+1]=FLIP(a[i+1]);
// See if it is a win or a loss for the other player.
if (!check(a)) {
// A loss for the other player means a win for us!
// Undo our last two moves.
a[i]=FLIP(a[i]);
a[i+1]=FLIP(a[i+1]);
return true;
}
// Still a loss. Undo this move.
a[i+1]=FLIP(a[i+1]);
}
// Still a loss. Undo this move.
a[i]=FLIP(a[i]);
} // if (a[i]=='H')
} // for (int i=0; i<strlen(a); i++)
// Loss.
return false;
}
int main() {
char a[100];
scanf("%s",a);
if (check(a)) {
printf("Winner!\n");
} else {
printf("Loser!\n");
}
}
关于c - Alice Bob Coin 最优解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21585587/
为用户在您网站上的内容提供友好的 URL 当然是件好事。但如何最好地做到这一点呢?像 foo.com/users/alice 这样的东西有很多优点,最重要的是你不会弄乱你的根命名空间。但我认为对用户来
我正在尝试使用 AliceBundle 生成虚拟数据对于 Symfony 框架。除了我正在寻找一种方法将数组中的数据随机分配给名为 type 的属性之外,一切似乎都运行良好。 .看着faker lib
我相信我了解数字签名的工作原理,但我仍然不明白它如何仍然保证消息已被已知发件人 (Alice) 加密。 让我们假设 Alice 想给 Bob 发送消息。爱丽丝和鲍勃上周见过面,鲍勃正在等待回复 yes
为什么这里只调用了 H1 的 ServeHTTP 方法,而 H2 和 H3 似乎是被忽略了? alice似乎是一个不错的中间件链接,在这里我尝试将它与 httprouter 一起使用,但只有外部/最后
Substrate Collectables Workshop在某些时候建议开发者链为 Alice 提供预注资金的帐户。 Let's go into the Transfer app, and mak
我正在使用 alice-carousel ( https://github.com/maxmarinich/react-alice-carousel/blob/master/README.md ) 制
我的问题是关于这个 bundle :https://github.com/nelmio/alice 与 Symfony2 的结合。 我有一些固定装置想要加载到我的新网站中,这个 bundle 非常适合
我有一个 alice.ts 文件,其中实现了一个名为 Alice 的类和一个名为 IAlice 的接口(interface): export interface IAlice { readon
考虑我在 hackerrank 上发现的这个问题: Coins Problem Alice and Bob were sitting in the sun; drinking orange juice
我正在设置 NelmioAlice和 Faker通过 AlixeFixturesBundle 在 Symfony2 项目中.我需要一个 组合 装置,例如: representative{1..100}
我使用 hautelook/alice-bundle。 由于以下错误($ in 解释为对对象的引用),我无法在我的装置中使用编码的 bcrypt 密码: 在 SimpleObjectGenerator
每当我打开Alice 3并选择一个默认场景时,它就会崩溃。 操作系统:Linux Mint 19.2 终端输出: libpng warning: iCCP: known incorrect sRGB
我在序言中编写了一个程序。 parent(Amy,John). parent(Bob,John). parent(John,Ben). parent(Alice,Ben). 我在 Ubuntu 12.
我想问是否可以将数组作为某些元素的值传递?例如,在我的例子中,我正在尝试为 FOSUserBundle User 实体设置角色,该实体将 roles 作为值数组而不是普通值。我的装置中有这个: Use
我似乎不知道如何正确地一起使用中间件和 Http Router。 我的代码是: type appContext struct { db *mgo.Database } func main(){
我正在使用 justinas/alice Go 中的中间件,我想将参数传递给中间件中使用的函数。 例如: middlewareChain := alice.New(Func1(foo string,f
我有一个 MySQL 数据库转储,其中只有我想用作 Alice Fixtures 的数据。我希望将版本化的 yaml 文件提交到我的分支。有人知道解析 SQL 以从中生成 YAML 固定装置的库或包,
我在 Symfony 4 中使用 Alice 的数据装置时遇到问题。 当我运行 bin/consoledoctrine:fixtures:load 时,系统询问我是否要清除数据库,最终命令终止,没有任
使用 Netbeans 从现有的 Alice 3 项目创建可运行的 jar 后,出现以下错误: system property: org.alice.ide.rootDirectory is not
我将 Symfony2 与 Doctrine 结合使用,并使用 Alice Fixture 包来生成用于测试的装置。 在一种情况下,我需要创建一个 id 为 148 的固定装置来进行特定测试。我们所有
我是一名优秀的程序员,十分优秀!