亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

C++約瑟夫環(huán)問題詳解

 更新時(shí)間:2022年01月11日 09:11:02   作者:夏天的峰沒有風(fēng)  
大家好,本篇文章主要講的是C++約瑟夫環(huán)問題詳解 ,感興趣的同學(xué)趕快來看一看吧,對(duì)你有幫助的話記得收藏一下,方便下次瀏覽

題目如下:

有一家公司,這個(gè)公司有一位老板和13名程序員,每天下班前老板都會(huì)組織他們玩一次游戲,游戲的勝利者可以不加班,失敗者需要加班2小時(shí)。游戲規(guī)則如下: 一張圓桌共有13個(gè)座位,從1到13編號(hào),游戲開始前老板會(huì)說出今天開始報(bào)數(shù)的座位編號(hào)start和淘汰序號(hào)k。 然后13名程序員開始搶位置,每個(gè)位置只能容納一程序員,每個(gè)程序員必須選擇一個(gè)座位。 座位號(hào)為start的程序員從1開始報(bào)數(shù),按如圖所示方向依次報(bào)數(shù)。每次報(bào)數(shù)為k的程序員淘汰并離開座位去加班,其他人繼續(xù)游戲,直到剩下最后一人瀟灑離去。

有一位非常聰明的程序員,每次在老板說出start和k的瞬間,就能立即選好座位并且獲勝,所以他從來沒有加過班,其他程序員都非常羨慕他,問他制勝法寶,只見他緩緩的打開了一個(gè)名為IAMGOD的.c文件,大家都露出崇拜的目光。

今天,你就是這個(gè)聰明的程序員,請(qǐng)完善IAMGOD.c文件內(nèi)容。

根據(jù)提示,在右側(cè)編輯器完善IAMGOD.c文件內(nèi)容,找到可以不加班的座位號(hào)。

輸入:start k

輸出:所選的座位編號(hào)i

示例1-輸入:2 3

           輸出:13

#include<stdio.h>
#include<malloc.h>
 
//創(chuàng)建結(jié)構(gòu)體 
typedef struct Node{
	int data;
	struct Node* next;
} NODE;
 
//創(chuàng)建新結(jié)點(diǎn)和插入結(jié)點(diǎn) 
void insert(NODE* head)
{
	int i;
	NODE* tail = head;
	
	//對(duì)每一個(gè)結(jié)點(diǎn)進(jìn)行編號(hào),依次編號(hào)為1、2、3......13
	for(i = 2; i <= 13; i++)
	{
		NODE* newnode;
		newnode = (NODE*)malloc(sizeof(NODE));
		newnode->data = i;
		
		//尾插法連接鏈表 
		newnode->next = NULL; 
		tail->next =  newnode;
		tail = newnode;
	}
	
	/*
    這段語句用來打印鏈表,檢測鏈表是否正確連接的 
	NODE* pmove = head; 
	while(pmove != NULL)
	{
	  printf("%d->",pmove->data);
	  pmove = pmove->next;
    } 
    */ 
	 
	 tail->next = head; //將尾結(jié)點(diǎn)連接到頭結(jié)點(diǎn)上,形成一個(gè)環(huán) 
}
 
void serch(NODE* head)
{
	 int start_data,i,k;
    NODE* start = head;
	scanf("%d%d", &start_data, &k);
	
	//移動(dòng)到第start_data結(jié)點(diǎn),并將此結(jié)點(diǎn)當(dāng)成1號(hào)結(jié)點(diǎn) 
	for(i = 2; i <= start_data; i++)
	{
		start = start -> next;
	}
	
	NODE* front; //front表示第k個(gè)結(jié)點(diǎn)的前一個(gè)結(jié)點(diǎn) 
	while(start->next != NULL)
	{
	  int j;
	  for(j = 2; j <= k; j++)
	  {
		front = start; //先讓front移動(dòng)到當(dāng)前結(jié)點(diǎn),然后當(dāng)前結(jié)點(diǎn)往下移動(dòng),就形成一前一后的效果 
		start = start->next; //移動(dòng)結(jié)點(diǎn) 
	  }
		
		front->next = start->next; //將第k個(gè)結(jié)點(diǎn)的上一個(gè)結(jié)點(diǎn)連接到它的下一個(gè)結(jié)點(diǎn)上 
		
		free(start);//刪除指定結(jié)點(diǎn)
		start = front->next;//更新start的位置,也就是1號(hào) 
		
		//當(dāng)?shù)趉個(gè)仍是本身,即只剩下了一個(gè)結(jié)點(diǎn),跳出循環(huán)
		if(start->data == (start->next)->data)
		 break;
	}	
	printf("%d",start->data);
}
 
int main()
{
   //創(chuàng)建鏈表 
	NODE* head;
	head = (NODE*)malloc(sizeof(NODE));
	head->data = 1;
	head->next = NULL;
	
	
	//創(chuàng)建新結(jié)點(diǎn)和連接結(jié)點(diǎn) 
    insert(head);
    
    //查找第k個(gè)結(jié)點(diǎn)并且將其刪除。 
    serch(head);
	return 0;
} 

到此這篇關(guān)于C++約瑟夫環(huán)問題詳解 的文章就介紹到這了,更多相關(guān)C++約瑟夫環(huán)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 數(shù)據(jù)結(jié)構(gòu)串的操作實(shí)例詳解

    數(shù)據(jù)結(jié)構(gòu)串的操作實(shí)例詳解

    這篇文章主要介紹了數(shù)據(jù)結(jié)構(gòu)串的操作實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-07-07
  • C語言超全面覆蓋操作符知識(shí)點(diǎn)

    C語言超全面覆蓋操作符知識(shí)點(diǎn)

    C?語言提供了豐富的操作符,有:算術(shù)操作符,移位操作符,位操作符,賦值操作符,單目操作符,關(guān)系操作符,邏輯操作符,條件操作符等。讓我們通讀本篇來詳細(xì)了解吧
    2022-06-06
  • 淺析C/C++中被人誤解的SIZEOF

    淺析C/C++中被人誤解的SIZEOF

    以下是對(duì)C/C++中的SIZEOF進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-07-07
  • C語言程序的編譯與預(yù)處理詳解

    C語言程序的編譯與預(yù)處理詳解

    這篇文章主要介紹了C語言程序的編譯與預(yù)處理,包括介紹了C和C++混合編程的情況,需要的朋友可以參考下,希望能夠給你帶來幫助
    2021-10-10
  • 最新評(píng)論