#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;