#include<stdio.h>
#define maxn 20
int a[maxn+], n; int go( int p,int d,int t )
{// printf("a[%d]=%d\n",p,a[p]);
while( t-- )
{ //该题的核心所在
do{
p = (p+d+n-) % n +;
}while( a[p] == );
}
return p;
} int main()
{
int k, m, p1, p2;
while( scanf("%d%d%d",&n, &k, &m) == )
{
for( int i=; i<=n; i++ ) a[i] = i;//位置初始化
printf("\n");
p1 = , p2 = n;
int left=n; while(left)
{//printf("a[p1]=%d,a[p2]=%d\t",a[p1],a[p2]);
p1 = go( p1, ,k );
p2 = go( p2, -,m );
a[p1] = a[p2] = ; //printf("p1=%d p2=%d\n\n",p1,p2); printf("%3d",p1); left--;
if( p1 != p2 ) { printf("%3d",p2); left--; }
if(left) printf(",");
}
printf("\n");
}
return ;
}
本题让我体会到,acm不是简简单单的编程。每行代码都要经过思考才能写下去。
笔算是必须要经历的,先要在纸上写好核心的算法(思路)才能开始码代码。
正题:本体其实就是搜索的一种,将已查过的数标0来使搜索跳过而不用死板的去删去存储空间
另外 p = (p+d+n-1) % n +1; 完成了我自己五行代码完成的任务值得学习,写核心算法前一定要注意思考!!!!!