輕工業OJ——2374小新同學鋪地磚(2)
阿新 • • 發佈:2018-12-04
小新同學鋪地磚(2)
題目描述
小新同學又去兼職鋪地磚了,這次房子規格還是M*N,地磚規格是X*Y,在鋪磚時,地磚可以切割,但切割的邊有些毛邊,所以切割後的邊只能對著牆根鋪放,磚上有條紋,旋轉180度不受影響,但不允許出現條紋橫豎交錯的情況,在保證美觀的同時,還要儘量少買地磚,這最少需要買多少地磚呢,這對小新同學來說難度增加了,你幫他算一下吧?
輸入
多例項測試,每組輸入資料佔一行有4個整數,依次為M、N、X、Y(0<X,Y<M,N<1000)。
輸出
對於每組輸入資料,在一行中輸出一個整數,表示最少需要購買多少地磚。
樣例輸入
100 100 5 5 80 40 6 4
樣例輸出
400 135
解題思路:
分情況判斷就好了,注意當剩餘邊的塊為奇數時,在對邊塊記錄時已經把最角的那塊地板磚加上了。不要重複算。(寫的比較水)
程式碼:
#include<stdio.h> int aaaa(int m,int n,int x,int y) { int i,j,sum; i=m/x; j=n/y; sum=i*j; if(n%y!=0&&m%x!=0) { if(y/(n%y)<2&&x/(m%x)<2) sum=sum+i+j+1; if(y/(n%y)>=2&&x/(m%x)>=2) { if(i%2==0&&j%2==0) sum=sum+i/2+j/2+1; if((i%2!=0&&j%2==0)||(i%2==0&&j%2!=0)) sum=sum+i/2+j/2+1; if(i%2!=0&&j%2!=0) sum=sum+i/2+j/2+2; } if(y/(n%y)>=2&&x/(m%x)<2) { if(i%2!=0) sum=sum+i/2+j+1; if(i%2==0) sum=sum+i/2+j+1; } if(y/(n%y)<2&&x/(m%x)>=2) { if(j%2!=0) sum=sum+i+j/2+1; if(j%2==0) sum=sum+i+j/2+1; } } else if(n%y!=0&&m%x==0) { if(y/(n%y)<2) sum=sum+i; if(y/(n%y)>=2) { if(i%2==0) sum=sum+i/2; else sum=sum+i/2+1; } } else if(n%y==0&&m%x!=0) { if(x/(m%x)<2) sum=sum+j; if(x/(m%x)>=2) { if(j%2==0) sum=sum+j/2; else sum=sum+j/2+1; } } return sum; } int main() { int m,n,x,y; int num,i,j,u,p,max,sum; while(scanf("%d%d%d%d",&m,&n,&x,&y)!=EOF) { sum=aaaa(m,n,x,y); num=aaaa(m,n,y,x); if(sum<num) printf("%d\n",sum); else printf("%d\n",num); } return 0; }