测评会员优惠活动进行中 · 开通 VIP,有效期内测评不限次 VIP 优惠中 · 测评不限次 立即查看

A41026. 计算直线的交点数

填空题 较难

题目描述

计算直线的交点数

题目描述

平面上有n条直线,且无三线共点,问这些直线能有多少种不同交点数。

比如,如果n=2,则可能的交点数量为0(平行)或者1(不平行)。

输入格式

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

输出格式

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

样例输入

2

3

样例输出

0 1

0 2 3

参考答案

#include <stdio.h> int main() { // n条直线最多可有(n-1)*n/2个交点,20条直线最多190个交点 int a[21][191] = {0}; //初始化数组全为0 for (int i = 0; i < 21; i++) { a[i][0] = 1; //令列坐标为0的值都为1(全平行) } for (int x = 2; x <= 20; x++) //总直线数x的循环 { for (int n = 0; n <= x; n++) //不平行部分n的循环 { for (int j = 0; j <= (n - 1) * n / 2; j++) // n的列下标循环【0,(n-1)*n/2】 { if (a[n][j] == 1) //若存在n条直线j个交点 { a[x][(x - n) * n + j] = 1; //则存在x条直线(x-n)*n+j个交点 } } } } int n; while (scanf("%d", &n) != EOF) //输入n { for (int i = 0; i <= (n - 1) * n / 2; i++) //循环列下标i【0,(n-1)*n/2】 { if (a[n][i] == 1) //a[n][i]==1表示n条直线可以存在i个交点 { printf("%d ", i); } } putchar('\n'); } return 0; }
上一题 下一题