#12360: c++answer


990499 (555278)

學校 : 臺北市私立延平高級中學
編號 : 60234
來源 : [223.137.250.218]
最後登入時間 :
2020-03-26 14:02:49
a694. 吞食天地二 | From: [203.72.178.252] | 發表日期 : 2017-07-12 13:34

#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);
		}
	}
	
}
 
#18812: Re:c++answer


kentsai1688@gmail.com (Ken Tsai)

學校 : 國立科學工業園區實驗高級中學
編號 : 99014
來源 : [118.163.197.175]
最後登入時間 :
2020-07-19 18:20:13
a694. 吞食天地二 | From: [123.240.239.161] | 發表日期 : 2019-08-06 21:44

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


 請注意:您正在編寫「解題報告」,請勿直接貼出完整程式碼(將被隱藏),而是請說明解題思路、所需使用的演算法...等,讓不會寫的使用者可以從中學習獲得成長。

 
#21988: Re:c++answer


jayw711kb@gmail.com (Jay Huang)

學校 : 國立虎尾科技大學
編號 : 119439
來源 : [27.247.130.217]
最後登入時間 :
2020-09-15 15:55:19
a694. 吞食天地二 | From: [27.246.226.191] | 發表日期 : 2020-08-08 14:08

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;


 
#21989: Re:c++answer


jayw711kb@gmail.com (Jay Huang)

學校 : 國立虎尾科技大學
編號 : 119439
來源 : [27.247.130.217]
最後登入時間 :
2020-09-15 15:55:19
a694. 吞食天地二 | From: [27.246.226.191] | 發表日期 : 2020-08-08 14:08

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;


 
ZeroJudge Forum