小厚的三角形(SDUT 3559)

小厚的三角形

       Time Limit: 1000MS Memory Limit: 65536KB

Problem Description
一天,小厚的好朋友给了他n个面积为1的正三角形。小厚比较喜欢规整的形状,所以他想要用这些正三角形拼成一个正多边形。要求恰好拼为一个正多边形,不可裁剪,多边形内部也不能有空隙。小厚想知道他能拼出的最大的一个正多边形面积为多少。正三角形可以有剩余。

Input
多组输入,输入到文件结束(EOF)
每组输入,输入一个正整数n(1 <= n <= 1000)

Output
对于每组输入,输出一个正整数,表示拼出的最大正多边形的面积。

Example Input
1
2
6

Example Output
1
1
6

Hint
对于第二组,两个正三角形不能完整拼出一个正多边形。因此最大面积为一个正三角形的面积 = 1。
PS:二维平面内各边相等,各角也相等的多边形叫做正多边形

题目链接:
http://acm.sdut.edu.cn/onlinejudge2/index.php/Home/Index/problemdetail/pid/3559.html

题意很简单,已知有多少个面积为1的正三角形,问能拼成的正多边形的最大面积。
思路就是先求出拼出大的正三角形可用的小的正三角形的个数,然后将所有的正三角形乘6,即所有六边形所可能包含的小三角形的个数。

AC的代码

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <string>
#include <cstring>
#include <algorithm>
#include <vector>
#include <stack>
#include <queue>
using namespace std;
#define N 10000
int triangle[N];
int main(void)
{
    int i,j,k;
    int n;
    triangle[0] = 1;
    triangle[1] = 6;
    for(i = 2, j = 2; j < 1010; i += 2, j++){
        triangle[i] = 2*j-1+triangle[i-2];
        triangle[i+1] = triangle[i]*6;
    }
    sort(triangle, triangle+2020);
    while(scanf("%d",&n) != EOF){
        for(i = 1; i < 2*N; i++){
            if(n < triangle[i]){
                printf("%d\n", triangle[i-1]);
                break;
            }
        }
    }
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值