找到平铺给定尺寸的地板所需的零件拼贴数

时间:2017-10-03 11:04:22

标签: c tile

此程序必须计算平铺地板所需的瓷砖数量。瓷砖是8英寸×8英寸。可以使用瓷砖作为整体或可以使用瓷砖的一部分。只能从瓷砖上切下一块可用的零件。也就是说,如果从瓷砖上切下一块,则必须扔掉瓷砖的其余部分。程序接受房间的长度和宽度,并返回使用的整个瓷砖的数量以及使用了多少部分瓷砖。长度以英寸为单位。

我已经尝试过这个问题并且没有问题获得所需的完整瓷砖的数量,但我似乎没有运气所需的部分瓷砖数量。我已经为它编写了这个程序。

#include<stdio.h> 
int main()
{
  int l,b,full,l1,bl,part;
  float ar2,ar3;
  scanf("%d%d,&l,&b);
  ar3=(float)(l*b)/64;
  l1=l/8;
  bl=b/8;
  full=l1*bl;
  ar2=ar3-full;
  part=ar2*2;
  printf("%d\n%d",full,part); 
  return 0;
}

2 个答案:

答案 0 :(得分:0)

在任一方向上都有0或1行部分切片。如果两个方向都有部分瓷砖,那么还有一个部分角落瓷砖。

您可以使用模数运算符%来查找是否存在任何部分切片:

// Calculation of partial tiles
part = 0;
int partL = l%8;
int partB = b%8;

if (partL > 0) {
    part += bl;   // Partial tiles along one edge
}
if (partB > 0) {
    part += l1;   // Partial tiles along the other edge
}
if (partL > 0 && partB > 0) {
    part += 1;   // Partial corner tile;
}

注意: l1的字形通常难以区分,因此在变量名称中使用它们时要小心。如果你不加思索地使用它们,代码将更难以阅读。

答案 1 :(得分:0)

常见的方法是让瓷砖平行于墙壁。在这种情况下,您可以找到两个方向所需的图块数量,并且图块的总数将是这两个数字的乘积。获得部分切片数量的技巧是分别计算整个切片的数量,然后计算整个部分切片的数量。代码变为:

#include<stdio.h>

int main()
{
  int l,b,full,l1,bl,part;
  int partl = 0, partb = 0;

  scanf("%d%d",&l,&b);

  l1=l/8;                       // number of whole tiles
  if ((l % 8) != 0) {
      partl = 1;                // will need one partial at the end
  }
  // second direction
  bl=b/8;
  if ((b % 8) != 0) {
      partb = 1;                // will need one partial at the end
  }
  full=l1*bl;                   // total number of whole tiles
  if (partl) l1 += 1;           // total (including partial) per direction
  if (partb) bl += 1;
  part = l1 * bl - full;        // partial is total - number of whole tiles
  printf("%d\n%d",full,part); 
  return 0;
}