目錄
創(chuàng)新互聯(lián)公司主營天峨網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營網(wǎng)站建設(shè)方案,app開發(fā)定制,天峨h5微信平臺小程序開發(fā)搭建,天峨網(wǎng)站營銷推廣歡迎天峨等地區(qū)企業(yè)咨詢錯排問題
有理數(shù)運算
年會抽獎__??途W(wǎng)
全部都不獲獎的概率
必定是由n個人都拿錯的情況種數(shù)
除n個人拿出的所有排列情況數(shù)
。n個人拿出的所有排列情況數(shù)
顯然是n的階乘。假設(shè)
a
的名字沒有被a
拿到,其他n - 1
個人都有可能拿到,即有n - 1
種情況。假設(shè)b
拿到了a
的名字,那么對于b的名字有兩種情況:
- 第一種是
b
的名字被a
拿到了,也就是a
、b
互相拿到了對方的名字,那么對于其他n - 2
個人互相拿錯又是一個子問題f(n - 2)
.- 第二種是
b
的名字沒有被a
拿到,則剩下的問題是子問題f(n - 1).
因此可得遞推公式
f(n) = (n - 1) * (f(n - 1) + f(n - 2))
.最終得出公式n人都不獲獎的概率
h(n) = (n - 1) * (f(n - 1) + f(n - 2)) / (n!)
#include#includeint main()
{
long long d[21] = { 0, 0, 1 }; // 錯排數(shù)量,預(yù)留第一項為0,配合下文中輸入的n
long long f[21] = { 1, 1, 2 }; // 階乘
for (int i = 3; i<= 20; i++)
{
d[i] = (i - 1) * (d[i - 1] + d[i - 2]); //錯排的遞推公式
f[i] = i * f[i - 1]; //階乘的遞推公式
}
int n;
while (std::cin >>n)
{
printf("%.2f%%\n", 100.0 * d[n] / f[n]); //用100.0來把結(jié)果處理成double,保留兩位小數(shù)
}
return 0;
}
有理數(shù)運算Rational Arithmetic (20)__牛客網(wǎng)
實現(xiàn)對兩個有理數(shù)的基本運算,包括加、減、乘、除。 輸入描述: 每個輸入文件只包含一個測試用例,測試用例會給出一行數(shù)據(jù),格式為 “a1/b1 a2/b2”分子分母的范圍都在長整型的范圍內(nèi),如果數(shù)字為負,則符號只會出現(xiàn)在分子的前面。分母一定是非零數(shù)。 輸出描述: 針對每個測試用例,都輸出四行,分別是這兩個有理數(shù)的和、差、積和商,格式為 “ 數(shù) 1 操作符 數(shù) 2 = 結(jié)果 ” 。注意,所有的有理數(shù)都將遵循一個簡單形式 “k a/b” ,其中 k 是整數(shù)部分, a/b 是最簡分數(shù)形式,如果該數(shù)為負數(shù),則必 須用括號包起來。如果除法中的除數(shù)為 0 ,則輸出 “Inf” 。結(jié)果中所有的整數(shù)都在 long int 的范圍內(nèi)。C++標準類寫法:
#includeusing namespace std;
typedef long long int64;
class Rational
{
public:
Rational(int64 n, int64 d)
{
negetive = false;
isZero = false;
// 在輸入時分母永遠不可能為0,但是經(jīng)過運算之后分母可能為0
if (0 == d)
{
isZero = true;
return;
}
// 分子小于0,表示為負數(shù)
if (n< 0)
{
negetive = !negetive;
}
// 在輸入時分母一定不會小于0, 但是經(jīng)過計算之后分母也可能會小于0
if (d< 0)
{
negetive = !negetive;
}
// 如果分數(shù)是假分數(shù),必須要將其化簡為真分數(shù) 比如:5 / 3---->1 2/3
integer = n / d;
numerator = n - integer * d;
denominator = abs(d);
// 如果不是最簡的分數(shù),還需要將其化簡為最簡的分數(shù): 10 / 15 ---->2 / 3
// 只需給分子和分母分別除分子和分母大公約數(shù)
if (numerator< -1 || numerator >1)
{
int gcd = CalcGCD(abs(numerator), denominator);
if (gcd)
{
numerator /= gcd;
denominator /= gcd;
}
}
totalnumerator = integer * denominator + numerator;
}
Rational operator+(const Rational& r)const
{
int64 n = totalnumerator * r.denominator + r.totalnumerator * denominator;
int64 d = denominator * r.denominator;
return Rational(n, d);
}
Rational operator-(const Rational& r)const
{
int64 n = totalnumerator * r.denominator - r.totalnumerator * denominator;
int64 d = denominator * r.denominator;
return Rational(n, d);
}
Rational operator*(const Rational& r)const
{
int64 n = totalnumerator * r.totalnumerator;
int64 d = denominator * r.denominator;
return Rational(n, d);
}
Rational operator/(const Rational& r)const
{
int64 n = totalnumerator * r.denominator;
int64 d = denominator * r.totalnumerator;
return Rational(n, d);
}
private:
// 求大公約數(shù):輾轉(zhuǎn)相除
int64 CalcGCD(int64 a, int64 b)
{
if (0 == b)
return a;
return CalcGCD(b, a % b);
}
friend ostream& operator<<(ostream& _cout, const Rational& r)
{
if (r.isZero)
{
_cout<< "Inf";
return _cout;
}
if (0 == r.integer && 0 == r.numerator)
{
_cout<< "0";
return _cout;
}
// 如果是負數(shù),需要用()括起來
if (r.negetive)
{
_cout<< "(-";
}
// 輸出有理數(shù):整數(shù) + 分數(shù)
// 整數(shù): 可能存在也可能不存在
if (r.integer)
{
_cout<< abs(r.integer);
// 如果分數(shù)部分存在,整數(shù)和分數(shù)之間有一個空格
if (r.numerator)
{
_cout<< " ";
}
}
// 分數(shù): 可能存在也可能不存在
if (r.numerator)
{
_cout<< abs(r.numerator)<< "/"<< r.denominator;
}
if (r.negetive)
{
_cout<< ")";
}
return _cout;
}
private:
int64 numerator; // 分子
int64 denominator; // 分母
int64 integer; // 整數(shù)部分
bool negetive; // 負數(shù)
bool isZero; // 分母是否為0
int64 totalnumerator; // 參與運算的分子:原分子 + 整數(shù)部分
};
int main()
{
int64 n1, d1, n2, d2;
while (scanf("%lld/%lld %lld/%lld", &n1, &d1, &n2, &d2) != EOF)
{
Rational r1(n1, d1);
Rational r2(n2, d2);
cout<< r1<< " + "<< r2<< " = "<< r1 + r2<< endl;
cout<< r1<< " - "<< r2<< " = "<< r1 - r2<< endl;
cout<< r1<< " * "<< r2<< " = "<< r1 * r2<< endl;
cout<< r1<< " / "<< r2<< " = "<< r1 / r2<< endl;
}
return 0;
}
C語言強行模擬:
#include#includeusing namespace std;
typedef long long ll;
ll gcd(ll a,ll b)
{
if(b==0) return a;
return gcd(b,a%b);
}
void totout(ll n,ll d)
{
if(d==0){
cout<<"Inf"<
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧