今天做到了一个题(题目来源:https://acm.sicnu.edu.cn),题目如下:
思考过后,发现需要用到数组+循环。于是,有了如下代码(其实还夹杂着学了一丢丢c++):
#include<stdio.h>
#include<algorithm>
using namespace std;
long long z[1000],y[1000];
int main()
{
long long n,k;
long long a,b,c,f;
scanf("%lld %lld",&n,&k);
for(int i;i<n;i++){
scanf("%lld",&z[i]);
}
for(int i=0;i<=n-k;i++){
for(a=i;a<i+k;a++){
y[i]+=z[a];
}
}
for(int i=0;i<=n-2*k;i++){
for(int h=i+k;h<=n-k;h++){
c=y[i]+y[h];
if(i==0){
f=c;
continue;
}
f=max(c,f);
}
}
printf("%lld",f);
return 0;
}
样例都通过了,但是提交后给的wa。当时直呼不理解。。。
百思不得其解之后,我决定一步一步来,不偷懒了,于是有了后来的多次调试。。。
果然,发现了很多细节上的问题。。。最终代码如下:
#include<stdio.h>
#include<algorithm>
using namespace std;
long long z[1000],y[1000];
int main()
{
long long n,k;
long long a,c,f;
scanf("%lld %lld",&n,&k);
for(int i;i<n;i++){
scanf("%lld",&z[i]);
}
for(int i=0;i<=n-k;i++){
for(a=i;a<i+k;a++){
y[i]+=z[a];
}
}
for(int i=0;i<=n-2*k;i++){
for(int h=i+k;h<=n-k;h++){
c=y[i]+y[h];
if(i==0&&h==k){
f=c;
continue;
}
f=max(c,f);
}
}
printf("%lld",f);
return 0;
}
忙活了几个小时,就为了那一点点(泪目)。
今日总结:写代码一定要严谨,莫要偷懒呀!!!
(若有问题,欢迎指正)
|