关于StackOverFlow的第一个问题。
这是一个问题:https://code.google.com/codejam/contest/11274486/dashboard#s=p0
我完成了我的c ++代码并且它正常工作,正确输出文件(我认为)。但Dashboard系统响应不正确。我不知道为什么会这样
我希望有人可以弄清楚我的算法有什么问题,或者如果你解决了它就分享你的代码。谢谢!
抱歉我的英语不好
这是我的代码与Xcode 7.3.1:
// already solved the problem and removed my bad code :P
感谢Hagen von Eitzen,
这是正确的版本:
#include <iostream>
using namespace std;
int letternum(string name)
{
int i,num = 0;
int count[26];
for (i=0; i<26; i++)
count[i] = 0;
for (i=0; i<name.length(); i++)
{
if (name[i] != ' ')
count[name[i]-'A'] = 1;
}
for (i=0; i<26; i++)
{
num += count[i];
}
return num;
}
int main()
{
int T,N,t,n;
int longlen,namelen;
char tempchar[21];
string longest;
string name;
FILE *fin = fopen("A-large-practice.in", "r");
FILE *fout = fopen("A-large-practice.out", "w");
fscanf(fin, "%d", &T);
for (t=0; t<T; t++)
{
memset(tempchar, '\0', 21);
longest = "";
name = "";
fscanf(fin, "%d\n", &N);
fscanf(fin, "%[^\n]%*c", tempchar);
longest = tempchar;
longlen = letternum(longest);
for (n=1; n<N; n++)
{
memset(tempchar, '\0', 21);
name = "";
fscanf(fin, "%[^\n]%*c", tempchar);
name = tempchar;
namelen = letternum(name);
if (longlen == namelen )
{
if (longest > name)
{
longest = name;
longlen = letternum(longest);
}
}
if ( longlen < namelen )
{
longest = name;
longlen = letternum(longest);
}
}
fprintf(fout, "Case #%d: %s\n", t+1, longest.c_str());
}
}
答案 0 :(得分:0)
名称最多可包含20个字符。您还需要为终止NUL字符保留空间。否则,如果输入确实是20个字符长,那么您的代码可能会崩溃
letternum
:效果(此处几乎不相关):您总是会计入最大长度20
,这可能会不必要地长;另外,你很幸运,你没有忘记将整个阵列归零。
如果在第一个循环中将++
替换为=1
,则只需要在第二个循环中求和。
另外,为什么不使用string
或strcmp
等标准?
答案 1 :(得分:0)
这适用于小型和大型数据集。
def word(a):
''' this will find the total number of unique character in the name'''
x=a.split()
x="".join(x)
x=list(x)
x=set(x)
x=list(x)
return len(x)
with open('A-large-practice.in','r') as f:
content = f.read().splitlines()
fo=open('large_output.txt','r+')
i=1
p=0
while i<len(content):
x=int(content[i])
y=[]
name=[]
for j in range(1,x+1):
name.append(content[i+j])
y.append(word(content[i+j]))
z=[name[i] for i in range(len(y)) if y[i]==max(y)]
z.sort()
z=z[0]
p=p+1
fo.write('case #{}: {} \n'.format(p,z))
i=i+x+1
fo.close()