首页 > 解决方案 > 我在本地机器上得到了正确的解决方案,但 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 中提交问题

标签: 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++;
        }
        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));
    }
};

推荐阅读