publicstaticvoidmain(String[]args){
約瑟夫(100,2);" />

嫒美直播免费版app下载-嫒美直播永久免费版下载-嫒美直播最新下载安装

當(dāng)前位置:首頁 > 教育綜合 > 正文

有 n 位小朋友排成一排,從左到右編號為 1-n。

數(shù)據(jù)結(jié)構(gòu)編程:求解報(bào)數(shù)問題。設(shè)有n個(gè)人占成一排,從左向右的編號分別為1到n,現(xiàn)在從左往右報(bào)數(shù)“1,2

publicclass約瑟夫問題{
publicstaticvoidmain(String[]args){
約瑟夫(100,2);
}
/**
*求解總?cè)藬?shù)n,數(shù)到第d個(gè)人出圈的約瑟夫問題。按順序打印出圈人。
*
*@paramn
*總?cè)藬?shù)。
*@paramd
*數(shù)到第幾個(gè)人出圈。
*/
publicstaticvoid約瑟夫(intn,intd){
boolean[]a=newboolean[n];
intstart=0;
while(圈里是否還有人(a)){
start=出圈(start,d,a);
}
}
privatestaticint出圈(intstart,intn,boolean[]a){
inti=start;
while(n>0){
while(a[i]){
i=(i+1)%a.length;
}
i=(i+1)%a.length;
n--;
}
i=(i+a.length-1)%a.length;
a[i]=true;
System.out.printf("%4d",i+1);
returni;
}
privatestaticboolean圈里是否還有人(boolean[]a){
for(inti=0;iif(!a[i])
returntrue;
}
returnfalse;
}
}

有N個(gè)小朋友,分別編號為1到N,他們按編號圍成一個(gè)圓圈,從1開始報(bào)數(shù),當(dāng)報(bào)到3的小朋友出列,

static void LastLeaver(int nums, int count) { int[] num = new int[nums]; for (int index = 0; index< num.Length; index++) { num[index] =index + 1;//從1-nums給每個(gè)人編號 } int m = 0; //m為退出人數(shù) int i = 0;//i為每次循環(huán)時(shí)的計(jì)數(shù)變量 int k = 0;//k為按1,2,3count報(bào)數(shù)時(shí)的計(jì)數(shù)變量 while (m < nums - 1) { if (num[i] != 0) { k++; } if (k ==

C語言:有n個(gè)人圍成一圈,按順序從1到n編號。從第一個(gè)人開始報(bào)數(shù)。

#include

int main()

{

int i,n,N,out,a[1000];

out=i=n=0;

printf("輸入約瑟夫圈大小\n100\n");

scanf("%d",&N);

for(i=0;i

{

a[i]=1;

}

i=0;

while(out!=N-1)         

{

if(a[i]==1)n++;

if(n==3){a[i]=0;n=0;out++;}

i++;

if(i==N)i=0;

}

for(i=0;i

if(a[i]==1)printf("最后剩下的是第%d個(gè)人",i+1);break;

return 0;

}

擴(kuò)展資料:

需要說明的是:

1、一個(gè)C語言源程序可以由一個(gè)或多個(gè)源文件組成。

2、每個(gè)源文件可由一個(gè)或多個(gè)函數(shù)組成。

3、一個(gè)源程序不論由多少個(gè)文件組成,都有一個(gè)且只能有一個(gè)main函數(shù),即主函數(shù)。是整個(gè)程序的入口。

4、源程序中可以有預(yù)處理命令(包括include 命令,ifdef、ifndef命令、define命令),預(yù)處理命令通常應(yīng)放在源文件或源程序的最前面。

5、每一個(gè)說明,每一個(gè)語句都必須以分號結(jié)尾。但預(yù)處理命令,函數(shù)頭和花括號“}”之后不能加分號。結(jié)構(gòu)體、聯(lián)合體、枚舉型的聲明的“}”后要加“ ;”。

6、標(biāo)識符,關(guān)鍵字之間必須至少加一個(gè)空格以示間隔。若已有明顯的間隔符,也可不再加空格來間隔。

參考資料:

百度百科-c語言

n個(gè)人圍成一圈,序號分別為1-n,從1號玩家從1開始報(bào)數(shù). 如果有玩家報(bào)的數(shù)是3的倍數(shù)或者

此題可用數(shù)學(xué)方法求解。



設(shè)有n個(gè)人(編號0~(n-1)),從0開始報(bào)數(shù),報(bào)到(m-1)的退出,剩下的人繼續(xù)從0開始報(bào)數(shù) (用數(shù)學(xué)方法解的時(shí)候需要注意應(yīng)當(dāng)從0開始編號,因?yàn)槿∮鄷〉?解。)



實(shí)質(zhì)是一個(gè)遞推,n個(gè)人中最終留下來的序號與n-1個(gè)人中留下來的人的序號有一個(gè)遞推關(guān)系式。

找規(guī)律的方法:

1、標(biāo)出序列號:找規(guī)律的題目,通常按照一定的順序給出一系列量,要求我們根據(jù)這些已知的量找出一般規(guī)律。找出的規(guī)律,通常包序列號。所以,把變量和序列號放在一起加以比較,就比較容易發(fā)現(xiàn)其中的奧秘。

2、斐波那契數(shù)列法:每個(gè)數(shù)都是前兩個(gè)數(shù)的和。

3、等差數(shù)列法:每兩個(gè)數(shù)之間的差都相等。

4、跳格子法:可以間隔著看,看隔著的數(shù)之間有什么關(guān)系,如14,1,12,3,10,5,第奇數(shù)項(xiàng)成等差數(shù)列,第偶數(shù)項(xiàng)也成等差數(shù)列,于是接下來應(yīng)該填8。

C語言:n個(gè)編號為1~n的人圍坐一圈,從1號開始正向報(bào)數(shù)到m者退出,從下一人繼續(xù);求出列序列,咋編程?

代碼文本:

#include "stdio.h"

int main(int argc,char *argv[]){

int a[20],b[20],i,j,t,n,m;

printf("Enter n(int 00 && n<21 && m>0 && m<21){

for(i=0;i

i=-1,j=t=0;

printf("\nThe result is:\n");

while(t

if(a[++i%=n] && (++j%=m)==0){

printf("%d ",b[t++]=a[i]);//生成并輸出序列

a[i]=0;

}

putchar('\n');

}

else

puts("ERROR");

return 0;

}

供參考……

展開全文閱讀