最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

利用簡潔的C語言代碼解決跳臺(tái)階問題與約瑟夫環(huán)問題

 更新時(shí)間:2016年02月07日 17:10:09   作者:Zhang_H  
這篇文章主要介紹了利用簡潔的C語言代碼解決跳臺(tái)階問題與約瑟夫環(huán)問題的方法,跳臺(tái)階問題與約瑟夫環(huán)問題是常見的基礎(chǔ)算法題目,需要的朋友可以參考下

跳臺(tái)階問題

題目:

一個(gè)臺(tái)階總共有 n 級(jí),如果一次可以跳 1 級(jí),也可以跳 2 級(jí)。

求總共有多少總跳法,并分析算法的時(shí)間復(fù)雜度。

分析:

也是比較基礎(chǔ)的題目,通過遞歸可以方便的求解

代碼實(shí)現(xiàn)如下(GCC編譯通過):

#include "stdio.h"
#include "stdlib.h"
 
int function(int n);
 
int main(void)
{
  int tmp;
   
  tmp = function(5);
  printf("%3d\n",tmp);
 
  return 0;
}
 
int function(int n)
{
  if(n == 1)
    return 1;
  else if(n == 2)
    return 2;
  else  
    return function(n-1) + function(n-2);
}


約瑟夫環(huán)問題
題目:

n個(gè)數(shù)字(0,1,…,n-1)形成一個(gè)圓圈,從數(shù)字0開始,每次從這個(gè)圓圈中刪除第m個(gè)數(shù)字(第一個(gè)為當(dāng)前數(shù)字本身,第二個(gè)為當(dāng)前數(shù)字的下一個(gè)數(shù)字)。當(dāng)一個(gè)數(shù)字刪除后,從被刪除數(shù)字的下一個(gè)繼續(xù)刪除第m個(gè)數(shù)字。求處在這個(gè)圓圈中剩下的最后一個(gè)數(shù)字。

(其實(shí)說了這么多就是約瑟夫環(huán)問題)

分析:

以前學(xué)習(xí)鏈表的時(shí)候也見過約瑟夫環(huán)問題,當(dāng)時(shí)是拿循環(huán)鏈表模擬整個(gè)過程來解決的,今天在網(wǎng)上看到一種分析。記錄下來:

    題目要求最后剩下的一個(gè)數(shù)(用last表示),也就是這個(gè)數(shù)是第幾個(gè),在(0,1,…,n-1)的位置是多少。明確了題目中的信息,所以我們要對(duì)這個(gè)數(shù)進(jìn)行歸納。假設(shè)知道這個(gè)數(shù)在剩下的k個(gè)數(shù)中的位置,怎么來求得它在剩余K+1個(gè)數(shù)中的位置,這樣一步一步推導(dǎo)出它在有n個(gè)數(shù)中的位置,即為所求。為什么能這樣歸納,因?yàn)檫@個(gè)最后剩下的數(shù)在所有刪除過程中有幸存活下來,只不過每次刪除了一個(gè)數(shù),它的位置就變了,知道最后,它的位置為0(只剩一個(gè)數(shù)了)。

現(xiàn)在來分析刪除第一個(gè)數(shù)后,last這個(gè)數(shù)的位置已之前有什么樣的關(guān)系。在這n個(gè)數(shù)字中,第一個(gè)被刪除的數(shù)字是(m-1)%n,為簡單起見記為k。那么刪除k之后的剩下n-1的數(shù)字為0,1,…,k-1,k+1,…,n-1,并且下一個(gè)開始計(jì)數(shù)的數(shù)字是k+1。相當(dāng)于在剩下的序列中,k+1排到最前面,從而形成序列k+1,…,n-1,0,…k-1。

k+1    ->    0
k+2    ->    1

n-1    ->    n-k-2
0       ->    n-k-1

k-1   ->   n-2

現(xiàn)在我們知道了有n-1個(gè)數(shù)時(shí)last的位置,記為f(n-1,m),那么如何來求得f(n,m)關(guān)于f(n-1,m)之間的關(guān)系?用X,Y來表示,如下:

Y              X

k+1    ->    0
k+2    ->    1

n-1    ->    n-k-2
0       ->     n-k-1

k-1    ->    n-2

y=( x+k+1) %n

k = (m-1)%n

所以y=(x+m)%n,最終關(guān)系如下:

                0                              n=1
f(n,m)={
                [f(n-1,m)+m]%n     n>1

根據(jù)關(guān)系可以很方便的得到代碼

代碼實(shí)現(xiàn)如下:

int LastRemaining(int n, int m)
{
  if(n < 1 || m < 1)
    return -1;
 
  int last = 0;
  for (int i = 2; i <= n; i ++) 
    last = (last + m) % i;
 
  return last;
}

相關(guān)文章

  • c語言實(shí)現(xiàn)簡易版三子棋(附完整代碼)

    c語言實(shí)現(xiàn)簡易版三子棋(附完整代碼)

    大家好,本篇文章主要講的是c語言實(shí)現(xiàn)簡易版三子棋(附完整代碼),感興趣的同學(xué)趕快來看一看吧,對(duì)你有幫助的話記得收藏一下
    2022-01-01
  • C++中function包裝器的應(yīng)用實(shí)例詳解

    C++中function包裝器的應(yīng)用實(shí)例詳解

    這篇文章主要介紹了C++中function包裝器的相關(guān)資料,std::function是C++11引入的一個(gè)模板類,用于封裝任何可調(diào)用對(duì)象,使得函數(shù)能夠像對(duì)象一樣傳遞、存儲(chǔ)和調(diào)用,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-12-12
  • C++可調(diào)用對(duì)象callable object深入分析

    C++可調(diào)用對(duì)象callable object深入分析

    所謂的callable object,表示可以被某種方式調(diào)用其某些函數(shù)的對(duì)象。它可以是:一個(gè)函數(shù)、一個(gè)指向成員函數(shù)的指針、一個(gè)函數(shù)對(duì)象,該對(duì)象擁有operator()、一個(gè)lambda表達(dá)式,嚴(yán)格的說它是一種函數(shù)對(duì)象
    2022-08-08
  • C語言通過棧實(shí)現(xiàn)小人走迷宮

    C語言通過棧實(shí)現(xiàn)小人走迷宮

    這篇文章主要為大家詳細(xì)介紹了C語言通過棧實(shí)現(xiàn)小人走迷宮,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • c++深入淺出講解堆排序和堆

    c++深入淺出講解堆排序和堆

    在c++里有很多排序方法,比如相對(duì)簡單的冒泡排序、選擇排序、插入排序,還有 STL里的sort函數(shù)  手寫快排  歸并排序等,還有就是堆排序,這次主要說堆排序和堆
    2022-03-03
  • C語言入門篇--關(guān)鍵字static詳解

    C語言入門篇--關(guān)鍵字static詳解

    本篇文章是C語言系列基礎(chǔ)篇,C語言中,static是用來修飾變量和函數(shù):1.修飾局部變量–>靜態(tài)局部變量2.修飾全局變量–>靜態(tài)全局變量3.修飾函數(shù)–>靜態(tài)函數(shù)
    2021-08-08
  • c語言實(shí)現(xiàn)的帶通配符匹配算法

    c語言實(shí)現(xiàn)的帶通配符匹配算法

    這篇文章主要介紹了c語言實(shí)現(xiàn)的帶通配符匹配算法,需要的朋友可以參考下
    2015-03-03
  • Visual Studio Code (vscode) 配置C、C++環(huán)境/編寫運(yùn)行C、C++的教程詳解(Windows)【真正的小白版】

    Visual Studio Code (vscode) 配置C、C++環(huán)境/編寫運(yùn)行C、C++的教程詳解(Windows

    這篇文章主要介紹了Visual Studio Code (vscode) 配置C、C++環(huán)境/編寫運(yùn)行C、C++的教程詳解(Windows)【真正的小白版】,圖文詳解介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-03-03
  • 基于C語言實(shí)現(xiàn)的貪吃蛇游戲完整實(shí)例代碼

    基于C語言實(shí)現(xiàn)的貪吃蛇游戲完整實(shí)例代碼

    這篇文章主要介紹了基于C語言實(shí)現(xiàn)的貪吃蛇游戲完整實(shí)例代碼,對(duì)于學(xué)習(xí)游戲開發(fā)的朋友有一定的借鑒價(jià)值,需要的朋友可以參考下
    2014-08-08
  • C++?Boost?StringAlgorithms超詳細(xì)講解

    C++?Boost?StringAlgorithms超詳細(xì)講解

    Boost是為C++語言標(biāo)準(zhǔn)庫提供擴(kuò)展的一些C++程序庫的總稱。Boost庫是一個(gè)可移植、提供源代碼的C++庫,作為標(biāo)準(zhǔn)庫的后備,是C++標(biāo)準(zhǔn)化進(jìn)程的開發(fā)引擎之一,是為C++語言標(biāo)準(zhǔn)庫提供擴(kuò)展的一些C++程序庫的總稱
    2022-11-11

最新評(píng)論

永新县| 上饶市| 瑞丽市| 黔江区| 来安县| 都匀市| 罗山县| 房产| 马鞍山市| 柯坪县| 大渡口区| 浦东新区| 沙湾县| 沧源| 靖远县| 腾冲县| 定远县| 洛阳市| 鹤岗市| 沾益县| 汽车| 淮阳县| 孝感市| 墨竹工卡县| 大石桥市| 长宁区| 博白县| 白银市| 鄂州市| 荔浦县| 象州县| 闵行区| 三原县| 龙川县| 长春市| 景洪市| 武冈市| 新密市| 镇平县| 大丰市| 汾阳市|