1. 程式人生 > >輕工業OJ——2374小新同學鋪地磚(2)

輕工業OJ——2374小新同學鋪地磚(2)

                                  小新同學鋪地磚(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;
}