首页 > 代码库 > uva133 救济金发放

uva133 救济金发放

 1 #include<stdio.h> 2 #define    maxn    20 3 int a[maxn+5], n;  4  5 int go( int p,int d,int t ) 6 {//    printf("a[%d]=%d\n",p,a[p]); 7     while( t-- ) 8     {  //该题的核心所在 9         do{10             p = (p+d+n-1) % n +1;11         }while( a[p] == 0 );12     }13     return p;14 }15 16 int main()17 {18     int k, m, p1, p2;19     while( scanf("%d%d%d",&n, &k, &m) == 3 )20     {21         for( int i=1; i<=n; i++ )    a[i] = i;//位置初始化22         printf("\n");23         p1 = 0, p2 = n;24         int left=n;25         26         while(left)27         {//printf("a[p1]=%d,a[p2]=%d\t",a[p1],a[p2]);28             p1 = go( p1, 1,k );29             p2 = go( p2, -1,m );30             a[p1] = a[p2] = 0;31             32             //printf("p1=%d p2=%d\n\n",p1,p2); 33             34             printf("%3d",p1); left--;35             if( p1 != p2 )    { printf("%3d",p2); left--; }36             if(left)        printf(",");37         }38         printf("\n");39     }40     return 0;41 }

本题让我体会到,acm不是简简单单的编程。每行代码都要经过思考才能写下去。

笔算是必须要经历的,先要在纸上写好核心的算法(思路)才能开始码代码。

正题:本体其实就是搜索的一种,将已查过的数标0来使搜索跳过而不用死板的去删去存储空间

另外  p = (p+d+n-1) % n +1;    完成了我自己五行代码完成的任务值得学习,写核心算法前一定要注意思考!!!!!

uva133 救济金发放