回 帖 发 新 帖 刷新版面

主题:悬赏50分

正多边形(Regular Polygonal Chains)
源程序名      CHAINS.???(PAS,C,CPP)
可执行文件名  CHAINS.EXE
输入文件名    CHAINS.IN
输出文件名    CHAINS.OUT
时间限制      1S

给你一个由闭合线段序列组成的多边形链。考虑这些两线段相交的交点。由于这些交点,在所有线段的长度固定时,多边形的形状可以被改变。
你的任务是找出一个给定的多边形链是否可以变化成正多边形的形状(多边形的所有边的长度相等)。

输入
输入文件的第一行包括多边形链中线段的个数。最多有70000条线段。第二行描述了所有线段的长度,当然是按顺序给出的。所有的长度是1到100的整数(包括两端点)。

输出
正多边形(Regular Polygonal Chains)
源程序名      CHAINS.???(PAS,C,CPP)
可执行文件名  CHAINS.EXE
输入文件名    CHAINS.IN
输出文件名    CHAINS.OUT
时间限制      1S

给你一个由闭合线段序列组成的多边形链。考虑这些两线段相交的交点。由于这些交点,在所有线段的长度固定时,多边形的形状可以被改变。
你的任务是找出一个给定的多边形链是否可以变化成正多边形的形状(多边形的所有边的长度相等)。

输入
输入文件的第一行包括多边形链中线段的个数。最多有70000条线段。第二行描述了所有线段的长度,当然是按顺序给出的。所有的长度是1到100的整数(包括两端点)。

输出
你的程序只需输出一行。以任意顺序输出链可以变化得到的正多边形。对每一个多边形,输出它的边的个数。

样例
CHAINS.IN
8
1 1 2 2 1 1 2 2

CHAINS.OUT
3 4 6

你的程序只需输出一行。以任意顺序输出链可以变化得到的正多边形。对每一个多边形,输出它的边的个数。

样例
CHAINS.IN
8
1 1 2 2 1 1 2 2

CHAINS.OUT
3 4 6

回复列表 (共3个回复)

沙发

#include <fstream.h>
#include <string.h>

int line[8000000];
int n;

int main()
{
    ifstream fin("chains.in");ofstream fou("chains.out");
    fin>>n;int i,s=0;memset(line,0,sizeof(line));
    for (i=0;i<n;i++)
    {
        int a;fin>>a;s+=a;
        line[s]=1;
    }
    int t=0;
    for (i=3;i<=n;i++)
    {
        if (s%i==0)
        {
            int v=s/i,j,l;
            for (l=0;l<v;l++)
            {
                int k=l;
                for (j=1;j<n;j++)
                {
                    k+=v;if (!line[k]) break;
                }
                if (k>=s) 
                {
                    if (t) fou<<' ';
                    fou<<i;t=1;break;
                }
            }
        }
    }
    fou<<endl;
    return 0;
}

板凳

这是C语言,我要P语言

3 楼

自己小改一下就行了 !

我来回复

您尚未登录,请登录后再回复。点此登录或注册