Uva 133 - The Dole Queue

难度不是很大,思路方面不是特别难,但是对细节方面还是有一定要求的,这个题自己的思路我感觉还是比较中规中矩,技巧性不大,可能是因为目前所掌握的各种算法技巧不足,以后要多在这方面下功夫。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
    int m,n,k,i,j,l,r,s,t,ka,ma,ia,ja;
    int a[21],b[21];
    while( scanf("%d%d%d",&n,&k,&m) != EOF )
    {
        if(n==0 && k==0 && m==0)
            break;
         ia=1;   ja=n;  t=0;
        for(i=1; i<=20; i++)
            a[i]=b[i]=i;
        while(1)
        {
            r=0;
            for(i=1; i<=n; i++)
                if(a[i]>=1 && a[i]<=n)
                    r=1;
            if(r == 0)
                break;
            ka=k;  ma=m;
            for(i=ia; ;ia++,i++)
            {
                if(a[i]<1 || a[i]>n)
                {
                    if(i == n)
                       { ia=0;  i=0; }
                    continue;
                }
                ka--;
                if(ka == 0)
                {
                    if(t != 0)
                        printf(",");
                    t++;
                    printf("%3d",a[i]);
                    break;
                }
                if(i == n)
                { ia=0;  i=0; }
            }
            for(j=ja; ;ja--,j--)
            {
                if(b[j]<1 || b[j]>n)
                {
                    if(j == 1)
                        { j=n+1; ja=n+1;}
                    continue;
                }
                ma--;
                if(ma == 0)
                {
                    if(b[j] == a[i])
                        break;
                    else
                    {  printf("%3d",b[j]);  break;   }
                }
                if(j == 1)
                    { j=n+1; ja=n+1;}
            }
            a[i]=a[j]=b[i]=b[j]=100;
        }
        printf("\n");
    }

    return 0;
}


你可能感兴趣的:(Uva 133 - The Dole Queue)