#include <stdio.h>
#include <math.h>
int main()
{
int a[100]= {2,};
int i,j,k;
int ISPRIME=1;
int sum=0;
for(i=1; i<100; i++) {
a[i]=a[i-1]+2;
}
int n,m;
int x,y;
while(scanf("%d%d",&n,&m)!=EOF) {
x=n%m;
y=n/m;
k=m;
if(x==0) {
ISPRIME=1;
for(j=1,i=0; j<=y; j++) {
m=j*m;
for(i; i<m; i++) {
sum+=a[i];
}
i=m;
if(ISPRIME==1) {
printf("%d",sum/k);
ISPRIME=0;
}
else {printf(" %d",sum/k);}
sum=0;
}
}else {
ISPRIME=1;
for(j=1,i=0; j<=y; j++) {
m=j*m;
for(i; i<m; i++) {
sum+=a[i];
}
i=m;
if(ISPRIME==1) {
printf("%d",sum/k);
ISPRIME=0;
}
else {printf(" %d",sum/k);}
sum=0;
}
m=m*y;
k=n-m;
for(i=m;i<n;i++){
sum+=a[i];
}
printf(" %d",sum/k);
sum=0;
}
printf("\n");
}
return 0;
}
问题在m=jm上,这样m是会累加的。比如m=2 ,j=1,那么m=jm=2没错,再次运行,m=2,j=2,m=jm=4,序列中2-4求和也对,样例测试你能过。但是在下一组就出问题了,
m=4,j=3,m=jm=43=12,序列求和就是4-12啦。
另外定义一个变量t,使t=jm,这样就不会累加了
#include <stdio.h>
#include <math.h>
int main()
{
int a[100]= {2,};
int i,j,k;
int ISPRIME=1;
int sum=0;
for(i=1; i<100; i++) {
a[i]=a[i-1]+2;
}
int n,m,t;
int x,y;
while(scanf("%d%d",&n,&m)!=EOF) {
x=n%m;
y=n/m;
k=m;
if(x==0) {
ISPRIME=1;
for(j=1,i=0; j<=y; j++) {
t=j*m;
for(i; i<t; i++) {
sum+=a[i];
}
i=t;
if(ISPRIME==1) {
printf("%d",sum/k);
ISPRIME=0;
}
else {printf(" %d",sum/k);}
sum=0;
}
}else {
ISPRIME=1;
for(j=1,i=0; j<=y; j++) {
t=j*m;
for(i; i<t; i++) {
sum+=a[i];
}
i=t;
if(ISPRIME==1) {
printf("%d",sum/k);
ISPRIME=0;
}
else {printf(" %d",sum/k);}
sum=0;
}
m=m*y;
k=n-m;
for(i=m;i<n;i++){
sum+=a[i];
}
printf(" %d",sum/k);
sum=0;
}
printf("\n");
return 0;
}