杭电1466题
//计算直线的交点数
//m条直线的交点方案数
//=(m-r)条平行线与r条直线交叉的交点数 + r条直线本身的交点方案
//=(m-r)*r+r条之间本身的交点方案数(1<=r<=m)
#include <iostream>
#include <vector>
using namespace std;
int main()
{
//使用多维数组实现,用到vector<int>(0)是对vector初始化(每个元素vector包括0个元素)否则不能对vector存入元素
vector<vector<int> > array(21,vector<int>(0));
array[1].push_back(0);
array[2].push_back(0);
array[2].push_back(1);
int n;
for(int i=3;i<21;i++)
{
array[i].push_back(0);
for(int j=1;j<i;j++)
{
for(int k=0;k<array[j].size();k++)
{
int count = (i-j)*j+array[j][k];
bool is_in = false;
//判断添加的是否有重复的内容
for(int m=0;m<array[i].size();m++)
{
if(count == array[i][m])
{
is_in = true;
break;
}
}
if(!is_in)
{
array[i].push_back(count);
}
}
}
}
while(cin>>n)
{
int count = array[n].size();
//冒泡排序
for(int i=0;i<count;i++)
{
int t=count-i-1;
for(int j=0;j<t;j++)
{
if(array[n][j]>array[n][j+1])
{
int temp = array[n][j];
array[n][j] = array[n][j+1];
array[n][j+1] = temp;
}
}
}
for(int k=0;k<count;k++)
{
//注:最后一个不要输出空格,否则会出现格式错误
if(k==count-1)
cout<<array[n][k];
else
{
cout<<array[n][k]<<" ";
}
}
cout<<endl;
}
return 0;
}