約瑟夫環問題【陣列】
阿新 • • 發佈:2019-02-03
Description
約瑟夫環問題:設有n個人圍坐一圈,並按順時針方向1—n編號。從第s個人開始進行報數,報數到第m個人,此人出圈,再從他的下一個人重新開始從1到m的報數進行下去 ,直到只剩一個人為業
Input
人數n
從第s個人開始報數s
報到第幾個數m
Output
剩下的最後一個人的編號
Sample Input
9 1 3
Sample Output
1
#include <stdio.h>
int main()
{
int n,f,s;
scanf("%d%d%d",&n,&s,&f); //輸入題目中的n s f
int a[n+1],i,num,k; // 定義變數
for(i=0; i<n; i++) //迴圈初始化每一個人的編號
a[i]=i+1;
num=0; //初始化變數
i=s-1;
k=0;
while(num<n-1) //當剩餘一人時停止
{
if(a[i]!=0)k++; //當第i個人報數成功後k+1
if(k==f) //當報數的人數到達f後出圈 抹去他的編號(將a[i]賦值為0)
{
a[i]=0;
num++;
k=0; //k重新計數
}
i++; //對下一個編號進行判斷
if(i==n)i=0; //當i超過編號最大值時 i從0重新計數
}
for(i=0; i<n; i++) //迴圈判斷輸出剩下的那一個人的編號
if(a[i]!=0)printf("%d",a[i]);
return 0;
}
約瑟夫環問題:設有n個人圍坐一圈,並按順時針方向1—n編號。從第s個人開始進行報數,報數到第m個人,此人出圈,再從他的下一個人重新開始從1到m的報數進行下去 ,直到只剩一個人為業
Input
人數n
從第s個人開始報數s
報到第幾個數m
Output
剩下的最後一個人的編號
Sample Input
9 1 3
Sample Output
1
#include <stdio.h>
int main()
{
int n,f,s;
scanf("%d%d%d",&n,&s,&f); //輸入題目中的n s f
int a[n+1],i,num,k; // 定義變數
for(i=0; i<n; i++) //迴圈初始化每一個人的編號
a[i]=i+1;
num=0; //初始化變數
i=s-1;
k=0;
while(num<n-1) //當剩餘一人時停止
{
if(a[i]!=0)k++; //當第i個人報數成功後k+1
if(k==f) //當報數的人數到達f後出圈 抹去他的編號(將a[i]賦值為0)
{
a[i]=0;
num++;
k=0; //k重新計數
}
i++; //對下一個編號進行判斷
if(i==n)i=0; //當i超過編號最大值時 i從0重新計數
}
for(i=0; i<n; i++) //迴圈判斷輸出剩下的那一個人的編號
if(a[i]!=0)printf("%d",a[i]);
return 0;
}