您的位置:首页 > 其它

心得

2015-10-07 22:38 405 查看
本题算法不难想出,但是中间还是出现了一些问题。

开始的时候是#11:Execution error,后来把普通的数组改成动态数组后问题消失。

后来又出现了Execution error: Your program had this runtime error: Illegal file open (/dev/tty)。

随后google解决方案,多数都是数组开小了。遂开大数组,无效。

突然意识到很有可能是低级错误,于是检查代码。

发现写了个

for(int i = 0; i < n2 ; i++)

delete[] d;

一开始没有注意到是因为这些错误编译器(ClodeBlocks)都会无视而成功编译,本地可以成功运行.

删掉循环,上传,通过。

有时候错误可能并不是和预设地一样,但是通过逻辑检查应该还是可以检查出来。

自己本地写代码,应该尽可能严谨,而不是只求编译器通过。

最后的代码:

/*
ID: bluemit1
PROG: gift1
LANG: C++
*/
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;

int main() {
ofstream fout ("gift1.out");
ifstream fin ("gift1.in");
int n;
fin >> n ;
char *a0 = new char[n*18];
char **a;
a = new char *
;
for(int i=0;i<n;++i)
a[i] = a0 + i*18;
char c[18];int *b=new int
;
for(int i=0;i<n;i++)
{
b[i]=0;
}
for(int i=0;i<n;i++)
for(int j=0;j<18;j++)
{
a[i][j]='\0';
}
for (int i=0;i<n;i++)
{
fin>>a[i];
}

for(int i=0;i<18;i++)
{
c[i]='\0';
}
fin>>c;
while(c[0]!='\0')
{
int sum,n2;
fin>>sum>>n2;

if(n2!=0)
{
char *d0 = new char[n2*18];
char **d;
d = new char *[n2];
for(int i=0;i<n2;++i)
d[i] = d0 + i*18;
for(int i=0;i<n2;i++)
for(int j=0;j<18;j++)
{
d[i][j]='\0';
}
for(int i=0;i<n2;i++)
{
fin>>d[i];
}
for(int i=0;i<n2;i++)
{
for(int j=0;j<n;j++)
{

if(strcmp(a[j],d[i])==0)
{

b[j]+=(sum/n2);

}

            }}

            for(int j=0;j<n;j++)
{
if(strcmp(a[j],c)==0)
{
b[j]-=sum;
b[j]+=sum%n2;}}

delete[] d;
delete [] d0;

    }
for(int i=0;i<18;i++)
{
c[i]='\0';}
fin>>c;

}


for(int i=0;i<n;i++)
{
fout<<a[i]<<" "<<b[i]<<endl;}


delete[] a;
delete b;
return 0;}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: