日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

第八周实践项目6 猴子选大王(数组版)

發布時間:2025/4/16 编程问答 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 第八周实践项目6 猴子选大王(数组版) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
/* *Copyright (c) 2017,煙臺大學計算機與控制工程學院 *All rights reserved. *文件名稱:項目6-一群猴子,編號是1,2,3 …m,這群猴子(m個)按照1-m的順序圍坐一圈。從第1只開始數,每數到第n個,該猴子就要離開此圈,這樣依次下來,最后一只出圈的猴子為大王。輸入m和n,輸出猴子離開圈子的順序,從中也可以看出最后為大王是幾號猴子。 *作 者:邵雪源 *完成日期:2017年12月14日 *版 本 號:v1.0 */ /*在一個數組中,數組中用1表示猴子在圈中,用0表示猴子已經出圈,數組下標對應與猴子編號對應(例如數組元素p[0]值為1,表示第1只猴子尚在圈中,即p[i]代表編號為i+1的猴子是否在圈中)。 一只猴子出圈,則將對應的數組值置為0;在報數過程中,要跨過值為0的猴子。 */ #include <stdio.h> #define MaxSize 8 void king(int m,int n) {int p[MaxSize];int i,j,t;for (i=0; i<m; i++) //構建初始序列,記錄m只猴子在圈中p[i]=1;t=-1; //首次報數將從起始位置為0,即第1只猴子開始,因為在使用p[t]前t要加1printf("出列順序:");for (i=1; i<=m; i++) //循環要執行m次,有m個猴子要出圈{j=1; // j用于報數while(j<=n) //{t=(t+1)%m; //看下一只猴子,到達最后時要折回去,所以用%mif (p[t]==1) j++; //等同于if (p[t]==1) j++;僅當q猴子在圈中,這個位置才報數}p[t]=0; //猴子出圈printf("%d ",t+1); //輸出出圈猴子的編號}printf("\n"); } int main() {int m,n;scanf("%d %d", &m, &n);king(m,n);return 0; } /*數組同參考解答1。在報數過程中,不再判斷為0為1,而是設置一個用于累加的變量,猴子在圈時加1相當于報數,出圈后是加0相當于沒有報數。*/ #include <stdio.h> #define MaxSize 8 void king(int m,int n) {int p[MaxSize];int i,s=0,t;for (i=0; i<m; i++) //構建初始序列,記錄m只猴子在圈中p[i]=1;t=0; //首次報數的起始位置為0,是第1只猴子printf("出列順序:");for (i=1; i<=m; ) //循環要執行m次,有m個猴子要出圈{s=s+p[t]; //s累加中,猴子在圈時加1相當于報數,出圈后是加0相當于沒有報數。if(s==n){p[t]=0; //猴子出圈printf("%d ",t+1); //輸出出圈猴子的編號s=0; //重新開始累加i++; //報數的猴子加1}t=(t+1)%m; //再報數時,從下一只猴子開始}printf("\n"); } int main() {int m,n;scanf("%d %d", &m, &n);king(m,n);return 0; } /*用數組元素保存猴子的編號,一只猴子出圈,執行從數組中刪除元素的操作,以此重復 數到最后一只猴子時需要折回到下標為0的位置,猴子出圈后,還還要實施刪除數組中元素(即將后面的數據前移)的工作*/ #include <stdio.h> #define MaxSize 100 void king(int m,int n) {int p[MaxSize];int i,j,t;for (i=0; i<m; i++) //構建初始序列,記錄m只猴子在p[0]~p[m-1]中p[i]=i+1;t=0; //首次報數的起始位置為0printf("出列順序:");for (i=m; i>=1; i--) //循環要執行m次,有m個猴子要出圈;共有i從m開始遞減至1,i還表示在圈中猴子的數目{t=(t+n-1)%i; //從t開始數1,其后第n-1個將數到n,t加n-1用%i取余,目的是到達最后一個猴子可以折回去繼續數printf("%d ",p[t]); //編號為p[t]的元素出列for (j=t+1; j<=i-1; j++)//后面的元素前移一個位置,刪除了編號為p[t]的猴子p[j-1]=p[j];}printf("\n"); } int main() {int m,n;scanf("%d %d", &m, &n);king(m,n);return 0; }

總結

以上是生活随笔為你收集整理的第八周实践项目6 猴子选大王(数组版)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。