1 綰︾憻澶幆錛圝osephus錛夐棶棰樻槸鐢卞彜緗楅┈鐨勫彶瀛﹀綰︾憻澶紙Josephus錛夋彁鍑虹殑錛屼粬鍙傚姞騫惰褰曚簡(jiǎn)鍏厓66鈥?0騫寸姽澶漢鍙嶆姉緗楅┈鐨勮搗涔夈傜害鐟熷か浣滀負(fù)涓涓皢鍐涳紝璁炬硶瀹堜綇浜?jiǎn)瑁樿揪浼壒鍩庤?7澶╀箣涔咃紝鍦ㄥ煄甯?jìng)鎿荛櫡涔嬪悗锛屼粬鍜?0鍚嶆紜殑灝嗗+鍦ㄩ檮榪戠殑涓涓礊絀翠腑閬塊毦銆傚湪閭i噷錛岃繖浜涘彌涔辮呰〃鍐寵“瑕佹姇闄嶆瘚瀹佹”銆備簬鏄紝綰︾憻澶緩璁瘡涓漢杞祦鏉姝諱粬鏃佽竟鐨勪漢錛岃岃繖涓『搴忔槸鐢辨娊絳懼喅瀹氱殑銆傜害鐟熷か鏈夐璋嬪湴鎶撳埌浜?jiǎn)鏈鍚庝竴絳撅紝騫朵笖錛屼綔涓烘礊絀翠腑鐨勪袱涓垢瀛樿呬箣涓錛屼粬璇存湇浜?jiǎn)浠栧師鍏堢殑鐗虹壊鍝佷竴璧鋒姇闄嶄簡(jiǎn)緗楅┈銆?
2 17涓栫邯鐨勬硶鍥芥暟瀛﹀鍔犳柉甯曞湪銆婃暟鐩殑娓告垙闂銆嬩腑璁茬殑涓涓晠浜嬶細(xì)15涓暀寰掑拰15 涓潪鏁欏緬鍦ㄦ繁嫻蜂笂閬囬櫓錛屽繀欏誨皢涓鍗婄殑浜烘姇鍏ユ搗涓紝鍏朵綑鐨勪漢鎵嶈兘騫稿厤浜庨毦錛屼簬鏄兂浜?jiǎn)涓涓姙娉曪細(xì)30涓漢鍥存垚涓鍦嗗湀錛屼粠絎竴涓漢寮濮嬩緷嬈℃姤鏁幫紝姣忔暟鍒扮涔?jié)涓汉灏睘畣浠栨墧鍏ュぇ鎿v錛屽姝ゅ驚鐜繘琛岀洿鍒頒粎浣?5涓漢涓烘銆傞棶鎬庢牱鎺掓硶錛屾墠鑳戒嬌姣忔鎶曞叆澶ф搗鐨勯兘鏄潪鏁欏緬.
3 鏈夛綆鍙尨瀛愶紝鎸夐『鏃墮拡鏂瑰悜鍥存垚涓鍦堥夊ぇ鐜嬶紙緙栧彿浠庯紤鍒幫綆錛夛紝浠庣錛戝彿
寮濮嬫姤鏁幫紝涓鐩存暟鍒幫綅錛屾暟鍒幫綅鐨勭尨瀛愰鍑哄湀澶栵紝鍓╀笅鐨勭尨瀛愬啀鎺ョ潃浠? 寮濮嬫姤鏁般傚氨榪欐牱錛?
鐩村埌鍦堝唴鍙墿涓嬩竴鍙尨瀛愭椂錛岃繖涓尨瀛愬氨鏄尨鐜嬶紝緙栫▼姹傝緭鍏ワ綆錛岋綅鍚庯紝杈撳嚭鏈鍚庣尨鐜嬬殑緙?
鍙楓?
4 緙栧彿涓?,2,3,…,n鐨刵涓漢鎸夐『鏃墮拡鏂瑰悜鍥村潗涓鍦堬紝姣忎漢鎸佹湁涓涓瘑鐮侊紙姝f暣鏁幫級(jí)銆備竴寮濮嬩換閫変竴涓鏁存暟浣滀負(fù)鎶ユ暟鐨勪笂闄愬糾錛屼粠絎竴涓漢寮濮嬫寜欏烘椂閽堟柟鍚戣嚜1寮濮嬮『搴忔姤鏁?鎶ュ埌m鏃跺仠姝€傛姤m鐨勪漢鍑哄垪錛屽皢浠栫殑瀵嗙爜浣滀負(fù)鏂扮殑m鍊鹼紝浠庝粬鍦ㄩ『鏃墮拡鏂瑰悜涓婄殑涓嬩竴浜哄紑濮嬮噸鏂頒粠1鎶ユ暟錛屽姝や笅鍘伙紝鐩村埌鎵鏈変漢鍏ㄩ儴鍑哄垪涓烘銆傜紪紼嬫墦鍗板嚭鍒楅『搴忋?/p>
浠ヤ笂鏄吀鍨嬬殑綰︾憻澶棶棰樸傜害鐟熷か闂鐨勪紶緇熻В娉曟槸鍒╃敤寰幆閾捐〃鍔犱互瑙e喅錛岃繖灝遍渶瑕佷粠1鍙峰厓绱犲紑濮嬫ā鎷熸墍鏈夊厓绱犲嚭鍒楃殑鎯呭喌錛岄檮涓婂師濮嬬殑瑙e喅鏂規(guī)硶錛?/p>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct node
{
int code;
node * next;
};
int n,m,i,j;
int main(void)
{
node * head,* tail,* no,* p2;
no=new node;
no->code=1;
no->next=NULL;
head=tail=no;
scanf("%d%d",&n,&m);
for (i=2;i<=n;i++)
{
no=new node;
no->code=i;
no->next=NULL;
tail->next=no;
tail=no;
}
tail->next=head;
for (i=1;i<=n-1;i++)
{
j=1;
while (j<=m-1)
{
no=no->next;
j++;
}
printf("%d ",no->next->code);
p2=no->next;
no->next=no->next->next;
delete p2;
}
printf("%d\n",no->code);
system("pause");
return 0;
}
瀵逛簬4 錛?/font>
#include<stdio.h>
#include<stdlib.h>
/*********
浣滆咃細(xì) 鍖椾含浜ら氬ぇ瀛?
寰幆閾捐〃鐨勫簲鐢?
********/
typedef struct LNode
{
int num,code;
struct LNode *next;
}LNode,*Linklist;
/*********
鍑芥暟鍚嶏細(xì)Josef
鍙傛暟錛氭暣褰錛屼唬琛ㄤ漢鏁?nbsp; m浠h〃鍒濆鐨勫瘑鐮?
榪斿洖鍊鹼細(xì)鏃?
**********/
void Josef(int n,int m)
{
Linklist head,p,L,q;
head = (Linklist)malloc(sizeof(LNode));
p = head;
int i,j,k,temp;
int mima = m;//鍒濆瀵嗙爜
for(i=1;i<n;i++)//寤虹珛鍗曞驚鐜摼琛?,鏈夊ご緇撶偣
{
L = (Linklist)malloc(sizeof(LNode));
p->next = L;
p = L;
}
L->next = head;//L鎸囧悜闃熷熬;
//L = head;
//p = head->n;
p = head;
for(i = 1;i<=n;i++)//涓烘瘡涓涓妭鐐硅緭鍏ュ瘑鐮佸拰鍙鋒暟
{
printf("璇蜂負(fù)鑺傜偣%d杈撳叆瀵嗙爜錛?,i);
scanf("%d",&j);
p->num = i;
p->code= j;
p = p->next;
}
int count = 0; //count鏉ュ鎵懼垹闄ょ殑鑺傜偣鐨勫墠涓涓妭鐐?
p = L; //浠庡熬鎸囬拡 寮濮嬫煡鎵撅紝鏉ラ槻姝㈠垵濮嬪瘑鐮佷負(fù)1鏃跺彲鑳藉甫鏉ョ殑鎸囬拡婧㈠嚭闂
while(p->next!=p)
{
while(count<mima-1)
{
p = p->next;
count++;
}
mima = p->next->code;
printf("%d ",p->next->num);
p->next = p->next->next;
count = 0;
}
printf("%d",p->num);
}
main()
{
int n,m;
printf("璇瘋緭鍏ヤ漢鏁幫細(xì)");
scanf("%d",&n);
printf("璇瘋緭鍏ュ垵濮嬪瘑鐮侊細(xì)");
scanf("%d",&m);
Josef(n,m);
getchar();
}
浠ヤ笂鏃墮棿澶嶆潅搴﹂珮杈綩(nm)錛屽綋n錛宮闈炲父澶?渚嬪涓婄櫨涓囷紝涓婂崈涓?鐨勬椂鍊欙紝鍑犱箮鏄病鏈夊姙娉曞湪鐭椂闂村唴鍑虹粨鏋滅殑銆?/p>
鏈夌殑闂渚嬪鐚村瓙閫夊ぇ鐜?/font>浠呬粎鏄姹傚嚭鏈鍚庣殑鑳滃埄鑰呯殑搴忓彿錛岃屼笉鏄璇昏呮ā鎷熸暣涓繃紼嬨傚洜姝ゅ鏋滆榪芥眰鏁堢巼錛屽氨瑕佹墦鐮村父瑙勶紝瀹炴柦涓鐐規(guī)暟瀛︾瓥鐣ャ?/font>
涓轟簡(jiǎn)璁ㄨ鏂逛究錛屽厛鎶婇棶棰樼◢寰敼鍙樹竴涓嬶紝騫朵笉褰卞搷鍘熸剰錛?
闂鎻忚堪錛歯涓漢錛堢紪鍙?~(n-1))錛屼粠0寮濮嬫姤鏁幫紝鎶ュ埌(m-1)鐨勯鍑猴紝鍓╀笅鐨勪漢緇х畫浠?寮濮嬫姤鏁般傛眰鑳滃埄鑰呯殑緙栧彿銆?/p>
鎴戜滑鐭ラ亾絎竴涓漢(緙栧彿涓瀹氭槸m%n-1) 鍑哄垪涔嬪悗錛屽墿涓嬬殑n-1涓漢緇勬垚浜?jiǎn)涓涓柊鐨勭害鐟熷か鐜紙浠ョ紪鍙蜂負(fù)k=m%n鐨勪漢寮濮嬶級(jí):
k k+1 k+2 ... n-2, n-1, 0, 1, 2, ... k-2
騫朵笖浠巏寮濮嬫姤0銆?/p>
鐜板湪鎴戜滑鎶婁粬浠殑緙栧彿鍋氫竴涓嬭漿鎹細(xì)
k --> 0
k+1 --> 1
k+2 --> 2
...
...
k-2 --> n-2
k-1 --> n-1
鍙樻崲鍚庡氨瀹屽畬鍏ㄥ叏鎴愪負(fù)浜?n-1)涓漢鎶ユ暟鐨勫瓙闂錛屽亣濡傛垜浠煡閬撹繖涓瓙闂鐨勮В錛氫緥濡倄鏄渶緇堢殑鑳滃埄鑰咃紝閭d箞鏍規(guī)嵁涓婇潰榪欎釜琛ㄦ妸榪欎釜x鍙樺洖鍘諱笉鍒氬ソ灝辨槸n涓漢鎯呭喌鐨勮В鍚楋紵錛侊紒鍙樺洖鍘葷殑鍏紡寰堢畝鍗曪紝鐩鎬俊澶у閮藉彲浠ユ帹鍑烘潵錛歺'=(x+k)%n
濡備綍鐭ラ亾(n-1)涓漢鎶ユ暟鐨勯棶棰樼殑瑙o紵瀵癸紝鍙鐭ラ亾(n-2)涓漢鐨勮В灝辮浜?jiǎn)銆?n-2)涓漢鐨勮В鍛紵褰撶劧鏄厛姹?n-3)鐨勬儏鍐?---- 榪欐樉鐒跺氨鏄竴涓掓帹闂錛佸ソ浜?jiǎn)锛屾濊礬鍑烘潵浜?jiǎn)锛屼笅闈㈠啓閫掓帹鍏紡錛?/p>
浠[i]琛ㄧずi涓漢鐜╂父鎴忔姤m閫鍑烘渶鍚庤儨鍒╄呯殑緙栧彿錛屾渶鍚庣殑緇撴灉鑷劧鏄痜[n]
閫掓帹鍏紡
f[1]=0;
f[i]=(f[i-1]+m)%i; (i>1)
鏈変簡(jiǎn)榪欎釜鍏紡錛屾垜浠鍋氱殑灝辨槸浠?-n欏哄簭綆楀嚭f[i]鐨勬暟鍊鹼紝鏈鍚庣粨鏋滄槸f[n]銆傚洜涓哄疄闄呯敓媧諱腑緙栧彿鎬繪槸浠?寮濮嬶紝鎴戜滑杈撳嚭f[n]+1
鐢變簬鏄愮駭閫掓帹錛屼笉闇瑕佷繚瀛樻瘡涓猣[i]錛岀▼搴忎篃鏄紓甯哥畝鍗曪細(xì)
#include <stdio.h>
int main()
{
int n, m, i, s=0;
printf ("N M = "); scanf("%d%d", &n, &m);
for (i=2; i<=n; i++) s=(s+m)%i;
printf ("The winner is %d\n", s+1);
}
榪欎釜綆楁硶鐨勬椂闂村鏉傚害涓篛(n)錛岀浉瀵逛簬妯℃嫙綆楁硶宸茬粡鏈変簡(jiǎn)寰堝ぇ鐨勬彁楂樸傜畻n錛宮絳変簬涓鐧句竾錛屼竴鍗冧竾鐨勬儏鍐典笉鏄棶棰樹簡(jiǎn)銆傚彲瑙侊紝閫傚綋鍦拌繍鐢ㄦ暟瀛︾瓥鐣ワ紝涓嶄粎鍙互璁╃紪紼嬪彉寰楃畝鍗曪紝鑰屼笖寰寰浼?xì)鎴愬嶅湴鎻愰珮綆楁硶鎵ц鏁堢巼銆?/p>
鍦ㄦ鍩虹涓婂啀鐪嬬湅POJ 2244榪欎釜闂錛?/font>
闂鎻忚堪錛?a >http://acm.pku.edu.cn/JudgeOnline/problem?id=2244
榪欎釜闂瀵圭害鐟熷か闂鏈夌偣鍙樺艦錛?宸茬煡鏈鍚庣殑鍏冪礌 涓?2 錛宯 浠庤緭鍏ヤ腑緇欏嚭錛屾眰鍑烘渶灝忕殑m
鍏跺疄榪欎釜鐢ㄤ竴縐嶆瘮杈冪鐨勫姙娉曞氨鏄?m 浠?寮濮嬩竴涓竴涓瘯錛屾壘鍒扮涓涓紙n 錛宮錛夛紝浣垮緱鏈鍚庡嚭鍒楃殑鍏冪礌搴忓彿涓? 鐨?m 鍗充負(fù)瑙c?/p>
姹傛渶鍚庡嚭鍒楀厓绱犵殑鏂規(guī)硶鐢變笂闈㈢粰鍑猴紝榪欓噷鎵浣滅殑浼樺寲灝辨槸姹傜害鐟熷か鐨勪紭鍖栵紝鑷充簬閬嶅巻姹俶鐨勪紭鍖栧彲浠ヨ冭檻鎵撹〃銆?/p>
榪欎釜棰樼洰榪樻湁涓鐐硅娉ㄦ剰鐨勫氨鏄?錛?瀹冪涓涓墦鍗扮殑鍏冪礌濮嬬粓鏄?錛屼粠2寮濮嬩負(fù)綰︾憻澶棶棰橈紝榪欐牱鍙互鎶?鐪嬪仛鏄?錛宯鐪嬩負(fù)n-1鐨勭害鐟熷か闂銆?/p>
涓涓嬫槸婧愪唬鐮侊細(xì)
#include<stdio.h>
#include<stdlib.h>
int josef(int n,int m)
{
int s = 0;
for(int i = 2;i<=n-1;i++)
s = (s+m)%i;
return s+1+1;
}
int main()
{
int n;
int m;
scanf("%d",&n);
while(n)
{
for(m=1;;)
{
if(josef(n,m)==2)
break;
m++;
}
printf("%d\n",m);
scanf("%d",&n);
}
return 0;
}