當前位置:編程學習大全網 - 編程軟體 - 100例兒童編程全集

100例兒童編程全集

這就是著名的約瑟夫問題:

約瑟夫問題是壹個著名的問題:n個人圍成壹個圈,從第壹個開始數,第m個會被殺死,剩下最後壹個,剩下的也會被殺死。比如N=6,M=5,被殺的人的編號是5,4,6,2,3。最後剩下1。假設圈裏前k個是好人,後k個是壞人。妳的任務是確定最小m,使所有的壞人都能在第壹個好人之前被殺死。

在節目中做壹些評論,供大家理解。

#定義nmax 50

int main()

{

int i,k,m,n,num[nmax],* p;

printf("舒易如舒歌:");

scanf("%d ",& ampn);

p = num

for(I = 0;我& ltn;i++)

*(p+I)= I+1;//生成初始值1,2,3...,n

I = 0;

k = 0;

m = 0;

while(m & lt;N-1)//當有N-1人出圈時,停止循環,即找到最後壹個出圈的人。

{

if(*(p+i)!= 0)k++;//開始計數。如果序列號(i+1)的人不退圈(也就是他的值不為0的時候),算。

If(k==3) //第三個人退出圈子,把他的數組元素清零。

{ *(p+I)= 0;

k = 0;//計數值清零,重新計算剩余第三人的位置。

m++;//算算有多少人出了圈。

}

i++;//數組元素偏移量向後移動壹位-& gt;*(p+i)

if(I = = n)I = 0;//如果數組元素的序號超過當前總人數,則從第1人開始循環。

}

而(* p = = 0)p++;//找出剩下的人的序列號,不是0的就是他!

printf("%d是左\n ",* p);//輸出結果。好的.

}

  • 上一篇:新鄉市平行線教育怎麽收費的
  • 下一篇:我需要 C51單片機高效入門_第2版,有這個書籍的百度網盤嗎?
  • copyright 2024編程學習大全網