
本人拙劣的代碼
#include<iostream>
#include<cmath>
#include<algorithm>
using namespace std;
int factorial(int a) //階乘函式
{
int b=1;
if(a==1||a==0)
return b;
if(a>=2)
{
b=a*factorial(a-1);
return b;
}
if(a<0)
return 1;
}
int cn(int n,int k) //組合數函式
{
return factorial(n)/(factorial(k)*factorial(n-k));
}
int main()
{
int n,i=0,I,xb=0;
cin>>n;
int a[n];
int Cna=cn(n,2); //計算出所有的可能
int b[Cna]; //用一個陣列承接所有可能的差值
for(i=0;i<n;i++)
{
cin>>a[i];
}
for(i=0;i<n-1;i++) //計算所有出現的差值
{
for(I=i+1;I<n;I++)
{
b[xb]=abs(a[i]-a[I]);
xb++;
}
}
sort(b,b+Cna); //快排
cout<<b[1]; //輸出第二小
return 0;
}
運行之后顯示是浮點錯誤但是答案正確,求大佬解惑。
uj5u.com熱心網友回復:
這個階乘有問題,會超出int范圍其實沒必要用陣列,只要兩個變數,一個記錄最小差值,一個記錄第二小差值就可以了,這樣就沒必要計算階乘了
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/179389.html
標籤:C++ 語言
上一篇:阿里內部Java應屆生就業寶典,打擺子統統必備,內容太全面
下一篇:求助
