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]计算直线的交点数

  • 相关阅读:
    Spring boot核心注解
    Spring-boot配置文件
    JAVA操作Excel
    操作系统之基础
    Batch Normalization
    解决ios微信页面回退不刷新的问题
    textarea高度自适应,随着内容增加高度增加
    旋转卡 可以用做登录注册
    一个页面tab标签切换,都有scroll事件的解决办法
    input type="radio" 赋值问题
  • 原文地址:https://www.cnblogs.com/BoilTask/p/12569418.html
Copyright © 2011-2022 走看看