我正在为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;
}
答案 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;
}