zoukankan      html  css  js  c++  java
  • 【杭电】[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


    因为并非每对直线都互相相交,所以就要判断平行线的个数

    对于每个n,若有j条平行线,则可进行循环判断

    很显然对于平行的线相交的点为

    平行线个数*非平行线个数

    而非平行线又能有多种相交点个数组合

    于是可以进行递归相加,把非平行线的可能个数加上

    也就是dp[i]=(i-j)*j+dp[i-j]

    很明显发现这种方法把非平行线包含平行线的方案也加上了

    但是对于结果没有影响,只不过会造成重复输出

    所以进行判断这种点数方案有无用过就好


    #include<stdio.h>
    int a[21][200];
    int main() {
    	for(int i=0; i<=20; i++)
    		for(int j=0; j<i; j++)
    			if(j==0)
    				a[i][j]=1;
    			else
    				for(int k=0; k<=i*(i-1)/2; k++)
    					if(a[i-j][k]==1)
    						a[i][(i-j)*j+k]=1;
    	int n;
    	while(scanf("%d",&n)!=EOF) {
    		for(int i=0; i<=n*(n-1)/2; i++) {
    			if(a[n][i]==1)
    				printf("%d%c",i,i==n*(n-1)/2?'
    ':' ');
    		}
    	}
    	return 0;
    }

    题目地址:【杭电】[1466]计算直线的交点数

  • 相关阅读:
    索引失效
    laravel记录笔记Laravel 连接数据库、操作数据库的三种方式
    php 基于redis计数器类
    0x02 MySQL SQL基本语句
    0x01 MySQL What's DataBase
    浅析僵尸进程&孤儿进程
    python并发编程&IO模型
    关于python代码是编译执行还是解释执行
    python并发编程&协程
    基于Cpython的 GIL(Global Interpreter Lock)
  • 原文地址:https://www.cnblogs.com/BoilTask/p/12569418.html
Copyright © 2011-2022 走看看