最小包囲矩形


最小包囲矩形(10分)
 
タイトル内容:
直角座標系内の多角形の連続する頂点の座標シーケンスを表す2 D座標のセットが与えられます.この多角形を囲む座標軸に平行な最小矩形を計算し、左下角と右上角の座標を出力します.
 
入力形式:
1行目は正の整数nで頂点の数を表し、2行目はn群の整数であり、各頂点座標のxとy値を順次表す.
 
出力フォーマット:
計算された矩形の左下隅の座標のx、y値と右上隅の座標のx、y値を順に表す4つの整数.出力は最後に戻り改行付きです.
 
サンプルを入力:
5
1 1 1 4 3 7 4 4 4 1
 
出力サンプル:
1 1 4 7
 
時間制限:500 msメモリ制限:32000 kb
#include 
#include 
 
int Xmin(int a[],int n);
int Xmax(int a[],int n);
int Ymin(int a[],int n);
int Ymax(int a[],int n);
 
main(){
    int num;   //      
    scanf("%d",&num); 
    int *array;    //           
    array=(int*)malloc(2*num*sizeof(int));    //   2*num   
    int i,j;   //      
    for(i=0;i<2*num;i++)
    {
        scanf("%d",&array[i]);
        //  printf("%d",array[i]);
    } 
    printf("%d %d %d %d
",Xmin(array,num*2),Ymin(array,num*2),Xmax(array,num*2),Ymax(array,num*2)); free(array);    return 0;} int Xmin(int a[],int n){ int i; int ret=-1; // int tem=a[0]; for(i=2;ia[i]); else { tem=a[i]; } } ret=tem; return ret; } int Ymin(int a[],int n){ int i; int ret=-1; // int tem=a[1]; for(i=3;ia[i]); else { tem=a[i]; } } ret=tem; return ret; }

 
各位の大神に教えてもらって、注釈のあの//printf("%d",array[i]);どうして必ずプラスしなければならなくて、プログラムをプラスしないで運行を停止して、すべきではありません.追加後、プログラムに問題はありません.
 
問題の核心はここではなく、申請のメモリが足りない、array=(int*)malloc(2*num*sizeof(int));これでいいです.次は2つの他のリファレンスプログラムです.
#include   
#define ARRAY_SIZE 100  
struct Point {  
    int x;  
    int y;  
};  
struct Point p[ARRAY_SIZE];  
int main(void) {  
    int i, n;  
    int min_x, max_x, min_y, max_y;  
    scanf("%d", &n);  
    for(i = 0; i < n; ++i)  
        scanf("%d%d", &p[i].x, &p[i].y);  
    min_x = max_x = p[0].x;  
    min_y = max_y = p[0].y;  
    for(i = 1; i < n; ++i) {  
        if(min_x > p[i].x)  
            min_x = p[i].x;  
        if(max_x < p[i].x)  
            max_x = p[i].x;  
        if(min_y > p[i].y)  
            min_y = p[i].y;  
        if(max_y < p[i].y)  
            max_y = p[i].y;  
    }  
    printf("%d %d %d %d
", min_x, min_y, max_x, max_y); return 0; }
#include
int main(){
int n,i;
scanf("%d",&n);
int a[n],b[n];
for( i=0;imaxx){
maxx=a[i];
}
}
int miny,maxy;
miny=maxy=b[0];
for(i=1;imaxy){
maxy=b[i];
}
}
printf("%d%d%d%d",minx,miny,maxx,maxy);
printf("
"); return 0; }

次は動的構造体配列の方法で、この方法は比較的に良くて、実用性は比較的に強いです!
/**/

#include 
#include 

//          
struct PointXY{
	int x;
	int y;
};

main(){
	int num,i,j,min_x,max_x,min_y,max_y;
	scanf("%d",&num); 
	struct PointXY *p; 
	p=(struct PointXY*)malloc(num*sizeof(struct PointXY));    //           
	for(i=0;i p[j].x)    
            min_x = p[j].x;    
        if(max_x < p[j].x)    
            max_x = p[j].x;    
        if(min_y > p[j].y)    
            min_y = p[j].y;    
        if(max_y < p[j].y)    
            max_y = p[j].y;   
		}
	} 
	printf("%d %d %d %d
", min_x, min_y, max_x, max_y); free(p); return 0; }