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

    Problem Description
    平面上有n条直线,且无三线共点,问这些直线能有多少种不同交点数。
    比如,如果n=2,则可能的交点数量为0(平行)或者1(不平行)。
     
    Input
    输入数据包含多个测试实例,每个测试实例占一行,每行包含一个正整数n(n<=20),n表示直线的数量.
     
    Output
    每个测试实例对应一行输出,从小到大列出所有相交方案,其中每个数为可能的交点数,每行的整数之间用一个空格隔开。
     
    Sample Input
    2 3
     
    Sample Output
    0 1
    0 2 3
     //有点数学题目的感觉、或者是递推、
    //思路:
    m条直线的交点方案数
    =(m-r)条平行线与r条直线交叉的交点数
       + r条直线本身的交点方案
    =(m-r)*r+r条之间本身的交点方案数(1<=r<=m

    #include <iostream>
    #include <cstdio>
    #include <algorithm>
    using namespace std;
    int a[21][1003];
    bool cmp(int a,int b)
    {
        return a<b;
    }
    int main()
    {
        a[1][0]=0;a[1][1000]=0;
        a[2][0]=0;a[2][1]=1;a[2][1000]=1;
        int i,j,k,tp,l,sum;
        for(i=3;i<=20;i++)
        {  a[i][0]=0;a[i][1000]=0;
           for(l=1;l<i;l++)
           {   tp=i-l;
               for(j=0;j<=a[tp][1000];j++)
                 {
                     sum=l*tp+a[tp][j];
                     for(k=0;k<=a[i][1000];k++)
                       if(a[i][k]==sum)
                          break;
                    a[i][k]=sum;
                    if(k>a[i][1000])
                    a[i][1000]=k;
                 }
           }
        }
     while(scanf("%d",&k)!=EOF)
     {
          sort(a[k],a[k]+a[k][1000]+1,cmp);
          for(i=0;i<a[k][1000];i++)
            printf("%d ",a[k][i]);
           printf("%d\n",a[k][i]);
     }

        return 0;
    }

  • 相关阅读:
    如何開始深度學習?
    ckeditor 使用手册
    js 跨域的使用
    关于mysql中数据存储复合树形结构,查询时结果按树形结构输出
    关于tomcat的远程调试
    关于cookie的使用
    关于跨域
    去除除服串中的某些字符,不用String内置方法
    POI导入数据
    onbeforepaste
  • 原文地址:https://www.cnblogs.com/372465774y/p/2440285.html
Copyright © 2011-2022 走看看