1. 程式人生 > >演算法之路二:劉汝佳演算法競賽入門經典 救濟金髮放 UVa133

演算法之路二:劉汝佳演算法競賽入門經典 救濟金髮放 UVa133

#include<stdio.h>
#define maxn 25
int n,k ,m,a[maxn];

int go(int p,int d,int t);

int main()
{
    while(scanf("%d%d%d",&n,&k,&m)==3&&n)
    {
        for(int i=1;i<=n;i++) a[i]=i;
        int left=n;
        int p1=n,p2=1;
        while(left)
        {
            p1=go(p1,1
,k);//官員一 挑中的 p2=go(p2,-1,m);//官員二 挑中的 printf("%3d",p1); //先輸出官員一挑中的 left--;//人數減一 if(p2!=p1) { printf("%3d",p2);//兩人挑中的人不一樣,輸出官員二挑中的 left--;//總人數減一 } a[p1]=a[p2]=0;//已經跳、挑過的人的位置變為0 if
(left) printf(",");//還有人剩,繼續 } printf("\n"); } return 0; } int go(int p,int d,int t)//挑選函式 { while(t--) { do{ p=(p+d+n-1)%n+1;//關鍵 }while(a[p]==0); } return p; }