为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C
函数式编程 2023-03-18 13:09:30
在平面中给出了n个点。这些点任三点不共线,并且每两个点之间都有一条线相连,求三角形的数目。输入输入文件只有一行,这一行有若干个整数,相邻两个整数用一个空格隔开。每个整数N满足(1<=N<=2,000,000)。 输出输出文件有若干行。对输入文件中的每个整数N,输出一行,输出内容是三角形的数目。输入样例3 4 5输出样例1410我做的程序 帮忙看看哪错了?#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]);}}
查看完整描述

3 回答

?
慕田峪4524236

TA贡献1875条经验 获得超5个赞

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

查看完整回答
反对 回复 2023-03-22
?
人到中年有点甜

TA贡献1895条经验 获得超7个赞

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

查看完整回答
反对 回复 2023-03-22
?
慕无忌1623718

TA贡献1744条经验 获得超4个赞

#include<stdio.h> int main(void){    int ten, i = 0, count = 0;    long num[2000] = { 0 };    char c[2000];    //gets_s(c, 2000); //VS2013    gets(c); //VC6.0         for (i = 0; i < 2000; i++) {        if (c[i] == '\n' || c[i] == '\0'break;        else if (c[i] == ' ' || c[i] == '\t')  continue;        else if ('0' <= c[i] && c[i] <= '9') {            for (ten = 1;  '0' <= c[i] && c[i] <= '9'; ten *= 10, i++) {                num[count] = c[i] - '0' + ten * num[count];            }            count++;        }    }     for (i = 0; i < count; i++){        printf("%ld\n", num[i] * (num[i] - 1) * (num[i] - 2) / 6);    }}

因为“输入文件只有一行”,这里就不实际去打开某个文件了。

权当做,在命令行中输入一行数据。

你的代码问题挺多的,scanf函数遇到空格会停止读入的,所以根本没有办法完成整行的读取。

我在这里使用了gets函数,这是c里面唯一以回车结束读入的函数。

不过在,比较新的编译器中都不推荐这个函数(并没有扔掉);当然如果编译器支持可以使用get_s()。

如果使用c++,还可以用getline这个函数来进行替换。


查看完整回答
反对 回复 2023-03-22
  • 3 回答
  • 0 关注
  • 99 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信