zoukankan      html  css  js  c++  java
  • 杭电 1466 计算直线的交点数

    Description

    平面上有n条直线,且无三线共点,问这些直线能有多少种不同交点数。 
    比如,如果n=2,则可能的交点数量为0(平行)或者1(不平行)。

    Input

    输入数据包含多个测试实例,每个测试实例占一行,每行包含一个正整数n(n<=20),n表示直线的数量. 

    Output

    每个测试实例对应一行输出,从小到大列出所有相交方案,其中每个数为可能的交点数,每行的整数之间用一个空格隔开。

    Sample Input

    2
    3

    Sample Output

    0 1
    0 2 3

    1条线:0
    2条线:0 1
    3条线:0 2 3
    4条线:0 3 4 5 6 
    ……
    可以把直线分成两组,第一组是相互平行的直线,第二组是自由直线,自由直线不与平行直线平行;
    设直线总是为N,设第一组有i条直线,则第二组N-i有条直线。
    以4条线来分析:
    1、当i=4,N-i=0时,交点数:0
    2、当i=3,N-i=1时,交点数:3条平行线与1条自由线的交点个数+1条自由线能形成的交点个数,即3+0=3
    3、当i=2,N-i=2时,交点数:2*2+{0,1}={4,5}
    4、当i=1,N-i=3时,交点数:1*3+{0,2,3}={3,5,6}
     每个自由直线与每个平行直线都有一个交点,j自由直线与i平行直线的交点数为j*i,所以n条直线的交点数等于自由直线与平行直线的交点加上自由直线内部形成的交点 
     
     1 #include<cstdio>
     2 #include<string.h>
     3 int main()
     4 {
     5     int n,i,,k,free;
     6     int d[25][200];                            //d[i][j]表示i条直线有j个交点 
     7     memset(d,0,sizeof(d));
     8     for(i = 1 ; i < 21 ; i++)
     9     {
    10         d[i][0]=1;                            //交点为0总是存在的 
    11         for(free = 0 ; free <= i ; free++)    //free代表自由直线的数量 
    12         {
    13             for(k = 0 ; k < free*(free+1)/2 ; k++)
    14             {
    15                 if(d[free][k] == 1)        
    16                 {
    17                     d[i][free*(i-free)+k]=1;//free*(i-free)+k表示i条直线free条自由直线的交点数(k为自由直线的交点数) 
    18                 }
    19             }
    20         }
    21     }
    22     while(scanf("%d",&n)!=EOF)
    23     {
    24         for(i = 0 ; i <= n*(n-1)/2 ; i++)
    25         {
    26             if(i == 0)
    27                 printf("0");
    28             else
    29             {
    30                 if(d[n][i])
    31                 {
    32                     printf(" %d",i);
    33                 }
    34             }
    35         }
    36         printf("
    ");
    37     }
    38     return 0;
    39 }
  • 相关阅读:
    【C语言】找出1000以内所有的素数
    【C语言】字符数组,碎碎念
    【C语言】将输入的10个数排序
    C语言 排序算法
    冒死透露!全球前25名最臭名昭着的黑客人物
    苹果系统新致命漏洞,黑客可以随意控制您的手机设备
    物流行业的5大安全风险
    黑客来势汹汹,数据科学能拯救社交媒体吗?
    Facebook超过1亿用户数据泄露,疑与中国黑客组织有关?
    太可怕了!黑客可以通过监控智能手机传感器窃取您的密码
  • 原文地址:https://www.cnblogs.com/yexiaozi/p/5754082.html
Copyright © 2011-2022 走看看