在平面中給出了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 回答
慕無忌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這個函數來進行替換。
- 3 回答
- 0 關注
- 154 瀏覽
添加回答
舉報
0/150
提交
取消
