最小包囲矩形
3819 ワード
最小包囲矩形(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
各位の大神に教えてもらって、注釈のあの//printf("%d",array[i]);どうして必ずプラスしなければならなくて、プログラムをプラスしないで運行を停止して、すべきではありません.追加後、プログラムに問題はありません.
問題の核心はここではなく、申請のメモリが足りない、array=(int*)malloc(2*num*sizeof(int));これでいいです.次は2つの他のリファレンスプログラムです.
次は動的構造体配列の方法で、この方法は比較的に良くて、実用性は比較的に強いです!
タイトル内容:
直角座標系内の多角形の連続する頂点の座標シーケンスを表す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;
}