中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C++約瑟夫環問題怎么實現

發布時間:2022-01-11 11:16:16 來源:億速云 閱讀:134 作者:iii 欄目:開發技術

本文小編為大家詳細介紹“C++約瑟夫環問題怎么實現”,內容詳細,步驟清晰,細節處理妥當,希望這篇“C++約瑟夫環問題怎么實現”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。

題目如下:

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

C++約瑟夫環問題怎么實現

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

今天,你就是這個聰明的程序員,請完善IAMGOD.c文件內容。

根據提示,在右側編輯器完善IAMGOD.c文件內容,找到可以不加班的座位號。

輸入:start k

輸出:所選的座位編號i

示例1-輸入:2 3

           輸出:13

#include<stdio.h>
#include<malloc.h>
 
//創建結構體 
typedef struct Node{
	int data;
	struct Node* next;
} NODE;
 
//創建新結點和插入結點 
void insert(NODE* head)
{
	int i;
	NODE* tail = head;
	
	//對每一個結點進行編號,依次編號為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; //將尾結點連接到頭結點上,形成一個環 
}
 
void serch(NODE* head)
{
	 int start_data,i,k;
    NODE* start = head;
	scanf("%d%d", &start_data, &k);
	
	//移動到第start_data結點,并將此結點當成1號結點 
	for(i = 2; i <= start_data; i++)
	{
		start = start -> next;
	}
	
	NODE* front; //front表示第k個結點的前一個結點 
	while(start->next != NULL)
	{
	  int j;
	  for(j = 2; j <= k; j++)
	  {
		front = start; //先讓front移動到當前結點,然后當前結點往下移動,就形成一前一后的效果 
		start = start->next; //移動結點 
	  }
		
		front->next = start->next; //將第k個結點的上一個結點連接到它的下一個結點上 
		
		free(start);//刪除指定結點
		start = front->next;//更新start的位置,也就是1號 
		
		//當第k個仍是本身,即只剩下了一個結點,跳出循環
		if(start->data == (start->next)->data)
		 break;
	}	
	printf("%d",start->data);
}
 
int main()
{
   //創建鏈表 
	NODE* head;
	head = (NODE*)malloc(sizeof(NODE));
	head->data = 1;
	head->next = NULL;
	
	
	//創建新結點和連接結點 
    insert(head);
    
    //查找第k個結點并且將其刪除。 
    serch(head);
	return 0;
}

讀到這里,這篇“C++約瑟夫環問題怎么實現”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

c++
AI

临澧县| 岳阳市| 许昌市| 加查县| 迁安市| 永仁县| 长乐市| 西贡区| 县级市| 平顶山市| 库伦旗| 弥渡县| 荃湾区| 伊川县| 梓潼县| 思茅市| 乐山市| 叶城县| 花莲市| 普兰店市| 靖江市| 建宁县| 广昌县| 恩平市| 灌阳县| 玉林市| 大石桥市| 武川县| 安康市| 中江县| 绥棱县| 大兴区| 荆州市| 泾源县| 靖江市| 阿坝| 天门市| 应用必备| 金塔县| 富裕县| 岐山县|