標籤:輸出 地區 ios names col iostream void 之間 char
問題描述 在一個定義了直角座標系的紙上,畫一個(x1,y1)到(x2,y2)的矩形指將橫座標範圍從x1到x2,縱座標範圍從y1到y2之間的地區塗上顏色。 給出了一個畫了兩個矩形的例子。第一個矩形是(1,1) 到(4, 4),用綠色和紫色表示。第二個矩形是(2, 3)到(6, 5),用藍色和紫色表示。圖中,一共有15個單位的面積被塗上顏色,其中紫色部分被塗了兩次,但在計算面積時只計算一次。在實際的塗色過程中,所有的矩形都塗成統一的顏色,圖中顯示不同顏色僅為說明方便。 給出所有要畫的矩形,請問總共有多少個單位的面積被塗上顏色。輸入格式 輸入的第一行包含一個整數n,表示要畫的矩形的個數。 接下來n行,每行4個非負整數,分別表示要畫的矩形的左下角的橫座標與縱座標,以及右上方的橫座標與縱座標。輸出格式 輸出一個整數,表示有多少個單位的面積被塗上顏色。範例輸入2 1 1 4 4 2 3 6 5範例輸出15評測用例規模與約定 1<=n<=100,0<=橫座標、縱座標<=100。
#include<iostream>#include<cstring>using namespace std;char a[101][101];int n,m;void init(){ int i,j; for(i=0;i<=101;i++){ for(j=0;j<=101;j++){ a[i][j]=‘.‘; } }}void line(int e,int b,int c,int d){ int x1=100-b; int y1=e; int x2=100-d; int y2=c; int i; if(x1==x2){ if(y1>y2) { int temp=y1; y1=y2; y2=temp; } for(i=y1;i<=y2;i++){ if(a[x1][i]==‘-‘){ a[x1][i]=‘+‘; } else { a[x1][i]=‘|‘; } } } else { if(x1>x2){ int temp=x1; x1=x2; x2=temp; } for(i=x1;i<=x2;i++){ if(a[i][y1]==‘|‘){ a[i][y1]=‘+‘; } else { a[i][y1]=‘-‘; } } }}void in(int e,int b,char c){ int x=100-b; int y=e; int i; a[x][y]=c; if(x!=0){ for(i=x;i>=0;i--){ if(a[i][y]==‘-‘ || a[i][y]==‘+‘ || a[i][y]==‘|‘) break; a[i][y]=c; }} if(x!=n-1){ for(i=x;i<n;i++){ if(a[i][y]==‘-‘ || a[i][y]==‘+‘ || a[i][y]==‘|‘) break; a[i][y]=c; }} if(y!=0){ for(i=y;i>=0;i--){ if(a[x][i]==‘-‘ || a[x][i]==‘+‘ || a[x][i]==‘|‘) break; a[x][i]=c; }} if(y!=m-1){ for(i=y;i<m;i++){ if(a[x][i]==‘-‘ || a[x][i]==‘+‘ || a[x][i]==‘|‘) break; a[x][i]=c; }}}int main(){ int q,i,p,j; init(); cin>>m>>n>>q; while(q-->0){ cin>>p; if(p==1){ int e,b; char c; cin>>e>>b>>c; in(e,b,c); break; } else{ int e,b,c,d; cin>>e>>b>>c>>d; line(e,b,c,d); break; } } for(i=100;i>100-n;i--){ for(j=0;j<m;j++){ cout<<a[i][j]; } cout<<endl; } return 0;}
201512-3-畫圖