1. 程式人生 > >(組合數學3.1.2.1)POJ 2249 Binomial Showdown(排列組合公式的實現)

(組合數學3.1.2.1)POJ 2249 Binomial Showdown(排列組合公式的實現)

/*
 * POJ_2249.cpp
 *
 *  Created on: 2013年10月8日
 *      Author: Administrator
 */


#include <iostream>
#include <cstdio>

using namespace std;

typedef long long int64;

int64 work(int64 n , int64 k){
	if(k > n/2){
		k = n-k;
	}

	int64 a = 1;
	int64 b = 1;
	int i;
	for(i = 1 ; i <= k ; ++i){
		a *= n-i+1;
		b *= i;
		if(a%b == 0){
			a /= b;
			b = 1;
		}
	}

	return a/b;
}

int main(){
	int64 n,k;
	while(scanf("%lld%lld",&n,&k)!=EOF,n){
		printf("%lld\n",work(n,k));
	}

	return 0;
}

相關推薦

(組合數學3.1.2.1)POJ 2249 Binomial Showdown(排列組合公式實現)

/* * POJ_2249.cpp * * Created on: 2013年10月8日 * Author: Administrator */ #include <io

POJ 2249 Binomial Showdown(我的水題之路——求n個數裡取m個數的值)

Binomial Showdown Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 15158 Accepted: 4629 Description In how many ways can

pow函式(數學次方)在c語言的用法,兩種編寫方法例項( 計算1/1-1/2+1/3-1/4+1/5 …… + 1/99 - 1/100 的值)

關於c語言裡面pow函式,下面借鑑了某位博主的一篇文章: 標頭檔案:#include <math.h> pow() 函式用來求 x 的 y 次冪(次方),x、y及函式值都是double型 ,其原型為:    double pow(double x, double y

1/1 + 1/2 + 1/3 + 1/4 + ... 在數學上稱為調和級數,求前多少項的和才超過15.0?

如果An是全部不為0的等差數列,則1/An就稱為調和數列,求和所得即為調和級數,易得,所有調和級數都是發散於無窮的。 1/1 + 1/2 + 1/3 + 1/4 + ... 在數學上稱為調和級數。 它是發散的,也就是說,只要加上足夠多的項,就可以得到任意大的數字。 但是

Tomcat version 6.0 only supports J2EE 1.2, 1.3, 1.4, and Java EE 5 Web modules

time module clip modules 搜索 set 版本信息 ace 發現 本周開發中遇到了一個項目無法發布的問題 網上搜索到http://www.cnblogs.com/chanedi/articles/2112477.html這位同行的博客,順利解決問題,

用for和while循環求e的值[e=1+1/1!+1/2!+1/3!+1/4!+1/5!+...+1/n!]

主函數 int class urn log emp art print tracking /*編敲代碼,依據下面公式求e的值。要求用兩種方法計算: 1)for循環。計算前50項 2)while循環,直至最後一項的值小於10-4 e=1+1/1!+1/2!+1/

偶數求1/2+1/4+...+1/n奇數1/1+1/3+...+1/n

exti blank blog pan targe ava href spa tin 題目:編寫一個函數,輸入n為偶數時,調用函數求1/2+1/4+...+1/n,當輸入n為奇數時,調用函數1/1+1/3+...+1/n Scanner scanner

求多項式 1 - 1/2 + 1/3 - 1/4 + ... 前n項的值

Problem Description 多項式的描述如下: 1 - 1/2 + 1/3 - 1/4 + 1/5 - 1/6 + … 現在請你求出該多項式的前n項的和。 Input 輸入資料由2行組成,首先是一個正整數m(m<100),表示測試例項的個數,第二行包含m個正整數

計算1/1-1/2+1/3-1/4+1/5+……+1/99-1/100的值

看到這個式子首先總結規律: 1.每一項都是分數 2.分子都為1,分母依次遞增至100 3.分母的奇數項為正,偶數項為負 思路: 1.定義一個sum 2.建立一個迴圈,再判斷是否是奇數,如果是奇數往sum上加,否則(偶數)往sum上減 3.列印sum 程式碼如下: #include <s

Atitit redis使用場合總結 使用場景 目錄 1.1. 3. Session 儲存 1 1、 配置資料查詢 1 2. 排行榜應用,取TOP N操作 1 1.2. 1、查詢最

Atitit redis使用場合總結 使用場景          目錄 1.1. 3. Session 儲存 1 1、 配置資料查詢 1 2. 排行榜應用,取TOP N操作 1 1.2.     1

Atitit 程式設計 序列化技術點 概念原理v2 1. 序列化: 1 2. 序列化的目的 1 2.1. 為了傳輸 或者儲存 1 3. 應用場合 1 3.1. Form提交url 1 3.2. For

Atitit 程式設計 序列化技術點 概念原理v2   1. 序列化: 1 2. 序列化的目的 1 2.1. 為了傳輸 或者儲存 1 3. 應用場合 1 3.1. Form提交url 1 3.2. Form提交為 json物件,適合後端物件解析 1

第一章1.1-1.2-1.3—振幅和幅度區別

以下內容引自《數字訊號處理【美】,richard. Glyons》 1.1--------------------------------- 不要試圖將離散時間序列的點用線連器來。因為某些原因(尤其是那些對於出來連續訊號很有經驗的攻城獅),享用直線或者階梯線將點連起來。這樣看起來似乎沒有什麼

解決Tomcat version 7.0 only supports J2EE 1.2, 1.3, 1.4, and Java EE 5 and 6 Web modules專案無法加入到tomcat

解決Tomcat version 7.0 only supports J2EE 1.2, 1.3, 1.4, and Java EE 5 and 6 Web modules 無法加入到tomcat中 問題如下 1.在eclipse的workspace裡面找到該專案.sett

Atitit 微服務的一些理論 目錄 1. 微服務的4個設計原則和19個解決方案 1 2. 微服務應用4個設計原則 1 2.1. AKF拆分原則 2 2.2. 前後端分離 2 2.3. 無狀態服務

Atitit 微服務的一些理論   目錄 1. 微服務的4個設計原則和19個解決方案 1 2. 微服務應用4個設計原則 1 2.1. AKF拆分原則 2 2.2. 前後端分離 2 2.3. 無狀態服務 2 2.4. Restful通訊風格 2 3. 微服

交換兩個陣列的內容+求1/1-1/2+1/3...-1/100的值+1-100整數中出現9的次數

交換兩個陣列的內容: 交換兩個容量相同的整形陣列的內容: #include<stdio.h> /* 交換兩個整形陣列的內容 */ void print(int x[]) { for (int i = 0; i < 3;i++) { printf("%d "

tomcat部署專案時 報錯Tomcat version 7.0 only supports J2EE 1.2, 1.3, 1.4, and Java EE 5 and 6 Web modules

Tomcat version 7.0 only supports J2EE 1.2, 1.3, 1.4, and Java EE 5 and 6 Web modules   解決方法: 找到檔案 .settings->org.eclipse.wst.common.

解決Tomcat version 7.0 only supports J2EE 1.2, 1.3, 1.4, and Java EE 5 and 6 Web modules問題

一般來說,這種問題就是Web專案不能通過eclipse載入到伺服器上 解決辦法: 1.在eclipse的workspace裡面找到該專案 .settings 資料夾 2.編輯org.eclipse.wst.common.project.facet.core.xml

C語言——兩種方法計算1/1-1/2+1/3-1/4+1/5 …… + 1/99 - 1/100 的值

方法一:首先我們先觀察這個數學式子的規律,可以發現奇數項均為正數,偶數項均為負數。則我們可以利用條件語句if來判斷奇偶,最後分別對奇數項和偶數項求和。 原始碼: #include<stdio.h> #include<stdlib.h> int main() {

計算1/1-1/2+1/3-1/4+1/5······+1/99-1/100的值

#include <stdio.h> #include <stdlib.h> void main() { int i, n; double num = 0.0, sum = 0.0; for (i = 1; i <= 100;i++ ) { if (i%2=

1.計算1/1-1/2+1/3-1/4+1/5 …… + 1/99 - 1/100 的值2.實現陣列中值的交換

#include <stdio.h> #include<math.h> int main(){ int i=0; for (i = 0; i < 101; i++){ if (i % 2 == 0){ printf("%d\n",