c++ - 我在本地机器上得到了正确的解决方案,但 Topcoder 不接受这个,谁能帮助我
问题描述
问题陈述
|-O-| |-O-| |-O-| |-O-| |-O-|
在上方您可以看到我们辉煌的帝国舰队的一小部分,双离子引擎星际战斗机(简称为“TIE 战斗机”)。每架 TIE 战斗机由两个太阳能电池阵列机翼 ('|')、两个机翼支架 ('-') 和一个中央机舱 ('O') 组成。
尽管我们的 TIE 战机明显优于那些讨厌的叛军所驾驶的 X 翼战机,但偶尔一些 TIE 战机会受到一些意外的战斗伤害。每当损坏的 TIE 战斗机被回收时,我们都会将其拆解并打捞仍处于工作状态的部件。现在由您来使用这些回收的零件来组装尽可能多的完整 TIE 战斗机。
您将获得字符串 salvagedParts。salvagedParts 的每个字符代表一台已被打捞的机器。如上所述,字符“|”、“-”和“O”(大写的哦)代表您构建 TIE 战斗机所需的部件。salvagedParts 中可能还有其他字符。这些代表 TIE 战斗机中未使用的机械。
类: TIEFighterAssembly
方法:组装
参数:字符串
返回:整数
方法签名: int assemble(string salvagedParts)
(确保您的方法是公开的)
约束:
salvagedParts 将包含 1 到 50 个字符(包括 1 到 50 个字符)。
salvagedParts 的每个字符都是 "|-O=+()*" 之一(为了清楚起见,引号)。
例子
“|-O-|” 返回: 1 一架功能齐全的 TIE 战斗机。
我的代码是
class TIEFighterAssembly
{
public:
int assemble(string salvagedParts)
{
int a=0,b=0,c=0;
for(int i=0;i<salvagedParts.length();i++)
{
if(salvagedParts[i]=='-')a++;
else if(salvagedParts[i]=='|')b++;
else if(salvagedParts[i]=='O')c++;
}
int sum=0;
while(c)
{
if(c>0&&a>=2&&b>=2)
{
sum++;
c--;
a-=2;
b-=2;
}
else c=0;
}
return sum;
}
};
我收到了这个错误
Your code did not compile:
errors compiling:
In file included from top level:3:0:
TIEFighterAssembly.cc:4:15: error: 'string' has not been declared
int assemble(string salvagedParts)
^
TIEFighterAssembly.cc: In member function 'int TIEFighterAssembly::assemble(int)':
TIEFighterAssembly.cc:7:31: error: request for member 'length' in 'salvagedParts', which is of non-class type 'int'
for(int i=0;i<salvagedParts.length();i++)
^
TIEFighterAssembly.cc:9:22: error: invalid types 'int[int]' for array subscript
if(salvagedParts[i]=='-')a++;
^
TIEFighterAssembly.cc:10:27: error: invalid types 'int[int]' for array subscript
else if(salvagedParts[i]=='|')b++;
^
TIEFighterAssembly.cc:11:27: error: invalid types 'int[int]' for array subscript
else if(salvagedParts[i]=='O')c++;
^
In file included from top level:10:0:
Your class or method was improperly declared: In function 'int _wrapper::thunk(std::string)':
Your class or method was improperly declared:20034:3: error: no matching function for call to 'TIEFighterAssembly::assemble(std::string&)'
Your class or method was improperly declared:20034:3: note: candidate is:
In file included from top level:3:0:
TIEFighterAssembly.cc:4:6: note: int TIEFighterAssembly::assemble(int)
int assemble(string salvagedParts)
^
TIEFighterAssembly.cc:4:6: note: no known conversion for argument 1 from 'std::string {aka std::basic_string<char>}' to 'int'
In file included from top level:10:0:
Your class or method was improperly declared:20037:1: warning: control reaches end of non-void function [-Wreturn-type]
谁能帮助我如何在 TopCoder 中提交问题
解决方案
您的方法是正确的,但是可以修改您的代码以使其正常工作:
#include <string>
class TIEFighterAssembly
{
public:
static int assemble(std::string salvagedParts)
{
int a=0,b=0,c=0;
for(size_t i=0;i<salvagedParts.length();i++)
{
char character = salvagedParts[i];
if(character=='-')a++;
else if(character=='|')b++;
else if(character=='O')c++;
}
int sum=0;
while(c)
{
if(a>=2&&b>=2)
{
sum++;
c--;
a-=2;
b-=2;
}
else c=0;
}
return sum;
}
};
正如其他人提到的那样,您使用string
而不是std::string
. 如果您先存储字符然后比较它,您的代码也会减少开销。
如果您只是从 a、b 和 c 返回较小的变量,您的方法也可以变得更简单:
#include <string>
class TIEFighterAssembly
{
public:
static int assemble(std::string salvagedParts)
{
int a=0,b=0,c=0;
for(size_t i=0;i<salvagedParts.length();i++)
{
char character = salvagedParts[i];
if(character=='-')a++;
else if(character=='|')b++;
else if(character=='O')c++;
}
b/=2;
a/=2;
return(a < b && a < c ? a : (b < c ? b : c));
}
};
推荐阅读
- javascript - 如何在 React 中强制重新渲染表单中的输入字段?
- django - 如何以 django 方式交换 Postgresql 的主节点?
- tidymodels - usemodels 包中的 xgboost 代码片段将 one_hot 设置为 TRUE 是否有原因?
- xamarin - Xamarin VideoView 图像源
- c# - WinExe 的 VSCode tasks.json 和 launch.json 依赖于 dll
- python - 根据另一个数据框的值向数据框添加新列
- node.js - 为什么 NodeJS 不支持 String.prototype.replaceAll?
- amazon-web-services - 为 ECS 服务中的所有任务定义唯一的环境变量
- javascript - Dialogflow 未检测到“退出对话”意图
- android - 为 Flutter 设置 android 初始屏幕默认系统导航和状态栏颜色