这个小程序用C++怎么编?

来源:百度知道 编辑:UC知道 时间:2024/06/20 02:19:04
三角形个数

问题描述

在平面中给出了n个点。这些点任三点不共线,并且每两个点之间都有一条线相连,求三角形的数目。

输入

输入文件只有一行,这一行有若干个整数,相邻两个整数用一个空格隔开。每个整数N满足(1<=N<=2,000)。

输出

输出文件有若干行。对输入文件中的每个整数N,输出一行,输出内容是三角形的数目。

输入样例

3 4 5

输出样例

1

4

10
#include<iostream>
using namespace std;
int main()
{
int n;
double m;
while (cin>>n)
{
if(n<3||n>2000)
return 0;
else
{

m=n*(n-1)*(n-2)/6;
cout<<long(m)<<endl;
}
}
return 0;
}

这是我的程序 可是不知道哪里错了就是不行 ,请大家注意范围,2000是否可以运行

2000是可以的,double类型最多可以表示 10E99。
上面错误的地方是你定义了一个 int 类型的 n,计算 n*(n-1)*(n-2) 时是根据int类型计算的,所以会溢出,只要把 int n 改成 double n 就可以了。
按照题目的要求数据应该从文件中读入,开头应该加:
#include<fstream>

在main()函数中,修改程序如下:
int main()
{double n,m;
ofstream out_file("文件路径1",ios::out);
ifstream in_file("文件路径2",ios::in);
if (in_file.fail())
{cout<<"文件打开失败"<<endl;
exit(-1);
}

while (!in_file.eof())
{in_file>>n;
if(n<3||n>2000)
continue;
m=n*(n-1)*(n-2)/6;
out_file<<m<<endl;
}
in_file.close();
out_file.close();
return 0;
}

要读入的数据放在文件路径2中,输出的数据放在文件路径1中。

你上述的程序的问题就是只有输入非法的数据(<3 or > 2000) 才可以停止

只是求出来就简单了!如果n>3,那就Cn3就可以了。

组合问题
C(N,3)=n(n-1)(n-2)/6
C++的函数我忘得差不多了,电脑上也没有编译器,你自己改下

打开输入输出文件
while (!eof(infile))
{
cin<<n;