#include <stdio.h>
int main() {
//freopen("in.txt","r",stdin);
int n,m,x1,y1,x2,y2,i,j,k,n2,temp,total;
while(scanf("%d%d",&n,&m)!=EOF){
int sum[n+1][n+1];
for(i=0;i<=n;i++){sum[0][i]=0;sum[i][0]=0;}
for(i=1;i<=n;i++)
scanf("%d",&temp),sum[1][i]=sum[1][i-1]+temp;
for(i=2;i<=n;i++){
for(j=1;j<=n;j++){
scanf("%d",&temp);
sum[i][j]=sum[i][j-1]+sum[i-1][j]-sum[i-1][j-1]+temp;
}
}
for(i=0;i<m;i++){
scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
//printf("%d %d %d %d ",x1,y1,x2,y2);
total=sum[x2][y2]-sum[x2][y1-1]-sum[x1-1][y2]+sum[x1-1][y1-1];
printf("%d\n",total);
}
}
}
#include
int main() {
//freopen("in.txt","r",stdin);
int n,m,x1,y1,x2,y2,i,j,k,n2,temp,total;
while(scanf("%d%d",&n,&m)!=EOF){
int sum[n+1][n+1];
for(i=0;i<=n;i++){sum[0][i]=0;sum[i][0]=0;}
for(i=1;i<=n;i++)
scanf("%d",&temp),sum[1][i]=sum[1][i-1]+temp;
for(i=2;i<=n;i++){
for(j=1;j<=n;j++){
scanf("%d",&temp);
sum[i][j]=sum[i][j-1]+sum[i-1][j]-sum[i-1][j-1]+temp;
}
}
for(i=0;i<m;i++){
scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
//printf("%d %d %d %d ",x1,y1,x2,y2);
total=sum[x2][y2]-sum[x2][y1-1]-sum[x1-1][y2]+sum[x1-1][y1-1];
printf("%d\n",total);
}
}
}
請注意:您正在編寫「解題報告」,請勿直接貼出完整程式碼(將被隱藏),而是請說明解題思路、所需使用的演算法...等,讓不會寫的使用者可以從中學習獲得成長。
while(scanf("%d%d",&n,&m)!=EOF){int sum[n+1][n+1];
...
因為有些編譯器可以接受這行int sum[n+1][n+1];,在靜態記憶體配置裡用非常數的值,但大部分編譯器不能接受
最好用動態記憶體配置
如下:
int **sum=new int *[n+1];
for(int i=0;i<n;i++)sum[i]=new int [n+1];
int **sum=new int *[n+1];for(int i=0;i<n;i++)sum[i]=new int [n+1];記得用delete 歸還記憶體
如下:
for(int i=0;i<n;i++)delete [] sum[i];
delete []sum;
while(scanf("%d%d",&n,&m)!=EOF){int sum[n+1][n+1];
...
因為有些編譯器可以接受這行int sum[n+1][n+1];,在靜態記憶體配置裡用非常數的值,但大部分編譯器不能接受
最好用動態記憶體配置
如下:
int **sum=new int *[n+1];
for(int i=0;i<n;i++)sum[i]=new int [n+1];
int **sum=new int *[n+1];for(int i=0;i<n;i++)sum[i]=new int [n+1];記得用delete 歸還記憶體
如下:
for(int i=0;i<n;i++)delete [] sum[i];
delete []sum;