猿问

具体情况如下,请问我做的程序帮忙看看哪错了?

在平面中给出了n个点。这些点任三点不共线,并且每两个点之间都有一条线相连,求三角形的数目。
输入
输入文件只有一行,这一行有若干个整数,相邻两个整数用一个空格隔开。每个整数N满足(1<=N<=2,000,000)。 
输出
输出文件有若干行。对输入文件中的每个整数N,输出一行,输出内容是三角形的数目。
输入样例
3 4 5
输出样例
1
4
10
我做的程序 帮忙看看哪错了?
#include<stdio.h>
int main(void)
{
int i,a[2000],b[2000];
while(scanf("%d",&a[i]))
{
b[i]=a[i]*a[i-1]*a[i-2]/6;
i++;
}
for(i=0;i<=2000;i++)
{
printf("%d\n",b[i]);
}
}

函数式编程
浏览 111回答 3
3回答

慕田峪4524236

组合数公式C n 3 调用数学公式试试《math。h》

人到中年有点甜

b[i]=a[i]*(a[i]-1)*(a[i]-2)/6;

慕无忌1623718

#include<stdio.h>&nbsp;int&nbsp;main(void){&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;ten,&nbsp;i&nbsp;=&nbsp;0,&nbsp;count&nbsp;=&nbsp;0;&nbsp;&nbsp;&nbsp;&nbsp;long&nbsp;num[2000]&nbsp;=&nbsp;{&nbsp;0&nbsp;};&nbsp;&nbsp;&nbsp;&nbsp;char&nbsp;c[2000];&nbsp;&nbsp;&nbsp;&nbsp;//gets_s(c,&nbsp;2000);&nbsp;//VS2013&nbsp;&nbsp;&nbsp;&nbsp;gets(c);&nbsp;//VC6.0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(i&nbsp;=&nbsp;0;&nbsp;i&nbsp;<&nbsp;2000;&nbsp;i++)&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(c[i]&nbsp;==&nbsp;'\n'&nbsp;||&nbsp;c[i]&nbsp;==&nbsp;'\0')&nbsp;break;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;if&nbsp;(c[i]&nbsp;==&nbsp;'&nbsp;'&nbsp;||&nbsp;c[i]&nbsp;==&nbsp;'\t')&nbsp;&nbsp;continue;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;if&nbsp;('0'&nbsp;<=&nbsp;c[i]&nbsp;&&&nbsp;c[i]&nbsp;<=&nbsp;'9')&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(ten&nbsp;=&nbsp;1;&nbsp;&nbsp;'0'&nbsp;<=&nbsp;c[i]&nbsp;&&&nbsp;c[i]&nbsp;<=&nbsp;'9';&nbsp;ten&nbsp;*=&nbsp;10,&nbsp;i++)&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;num[count]&nbsp;=&nbsp;c[i]&nbsp;-&nbsp;'0'&nbsp;+&nbsp;ten&nbsp;*&nbsp;num[count];&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;count++;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(i&nbsp;=&nbsp;0;&nbsp;i&nbsp;<&nbsp;count;&nbsp;i++){&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("%ld\n",&nbsp;num[i]&nbsp;*&nbsp;(num[i]&nbsp;-&nbsp;1)&nbsp;*&nbsp;(num[i]&nbsp;-&nbsp;2)&nbsp;/&nbsp;6);&nbsp;&nbsp;&nbsp;&nbsp;}}因为“输入文件只有一行”,这里就不实际去打开某个文件了。权当做,在命令行中输入一行数据。你的代码问题挺多的,scanf函数遇到空格会停止读入的,所以根本没有办法完成整行的读取。我在这里使用了gets函数,这是c里面唯一以回车结束读入的函数。不过在,比较新的编译器中都不推荐这个函数(并没有扔掉);当然如果编译器支持可以使用get_s()。如果使用c++,还可以用getline这个函数来进行替换。
随时随地看视频慕课网APP
我要回答