第八周实践项目6 猴子选大王(数组版)
生活随笔
收集整理的這篇文章主要介紹了
第八周实践项目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 猴子选大王(数组版)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 第八周实践项目 5 计数的模式匹配
- 下一篇: 第八周实践项目7 对称矩阵的压缩存储及