题目: 按照图示来堆砌正六边形. 拼接得到的图形仍然是六边形, 求解给定a, b, c, 问包含多少个小六边形.
思路: 可以用圆形来模拟六边形, 拼接得到的图形实际上被一个平行四边形包含. 如下图.
平行四边形里包含的小圆个数 = 长 * 宽. 即 [c+(b-1)]*[a+(b-1)].
虚线部分的圆是不包含在六边形里的, 应该减去. 总个数是 2*[ 1+2+3+...+(b-1) ] = (b-1)*b.
所以公式为: ans=(a+(b-1))*(c+(b-1)) - (b-1)*b;
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <iostream>
#include <iomanip>
#include <cmath>
#define MAXN 5005
#define INF 1000000005
using namespace std;
int a, b, c, ans, i;
int main()
{
while(~scanf("%d%d%d", &a, &b, &c))
{
ans=(a+(b-1))*(c+(b-1)) - (b-1)*b;
cout << ans << endl;
}
return 0;
}