C ++基本程序运行时错误

时间:2016-01-01 08:23:04

标签: c++ runtime-error

我正在为open.kattis编程网站编写一个非常简单的程序。这是他们网站上最简单的问题之一,因此它对我的自我影响很大。当我自己测试代码时,它工作正常,但是他们的结果表明我在未知的测试用例上遇到运行时错误。问题描述的链接是:https://open.kattis.com/problems/everywhere但问题的一般基础是我正在尝试确定字符串列表中唯一实例的数量

我的代码是:

#include <iostream>
#include <string.h>

using namespace std;

int main()
{
  short t; // test cases
  short trips;
  char city[21];
  char cities[50][21];
  bool found;
  short count;

  // read in the number of test cases
  cin >> t;

  // loop through each test case
  for(int i=0; i<t; i++)
  {
    // read in the number of trips taken
    cin >> trips;

    // reset the count to 0
    count = 0;

    // loop through each trip
    for(int j=0; j<trips; j++)
    {
      // read in the city
      cin >> city;

      // Linear search to determine if city has been visited
      found = false;
      for(int k=0; k<count; k++)
      {
        if(strcmp(city, cities[k]) == 0)
          found = true;
      }

      // If city hasn't been visted, increment count and add to list
      if(!found)
      {
        strcpy(cities[count], city);
        count++;
      }

    }

    // Output results for test case
    cout << count << endl;
  }

  return 0;
}

1 个答案:

答案 0 :(得分:2)

你误解了描述。 char cities[50][21]仅适用于此练习:

  

行程次数最多为 100 ,且所有城市名称不得超过 20 字符。< / p>

调用可能的城市数量“旅行”在这里有点误导,但这不是测试次数(T≤50)。话虽这么说,如果你把问题分开并实际使用C ++标准库,你可以大大改进你的程序:

#include <iostream>
#include <set>         // <- Hint: those both will help you tremendously!
#include <string>      // <-

int single_test_case(){
  // ...
}

int main(){
    int tests;

    std::cin >> tests;

    for(int i = 0; i < tests; ++i){
        std::cout << single_test_case();
    }       
    return 0;
}