两处审题不清。
1、1和10处的换页和其它处的换页机制不同
2、当size小于4时,例外处理
还有就是 1~size 的循环的实现
#include <stdio.h>
#include <string.h>
#if 0
#define dbg printf
#else
#define dbg
#endif
void up(int size, int *start, int *cur)
{
if(size <= 4)
{
*cur = (*cur-2+size)%size+1;
}
else
{
if(*cur == 1)
{
*start = (*start-5+size)%size+1;
*cur = (*cur-2+size)%size+1;
}
else
{
if(*cur == *start)
{
*start = (*start-2+size)%size+1;
*cur = *start;
}
else
{
*cur = (*cur-2+size)%size+1;
}
}
}
}
void down(int size, int *start, int *cur)
{
dbg("(%d):cur=%d\n", __LINE__, *cur);
if(size <= 4)
{
*start = (*start+size)%size+1;
}
else
{
if(*cur == size)
{
*start = 1;
*cur = 1;
}
else
{
if(*cur == ((*start+2)%size+1))
{
*start = *start%size+1;
*cur = *cur%size+1;
}
else
{
*cur = *cur%size+1;
}
}
}
}
int main(void)
{
char str[64] = {0};
int num;
int i, j;
int start, cur;
while(scanf("%d", &num) != EOF)
{
start = 1;
cur = 1;
memset(str, 0, sizeof(str));
scanf("%s", str);
for(i=0; i<strlen(str); i++)
{
if(str[i] == 'U')
{
dbg("(%d):\n", __LINE__);
up(num, &start, &cur);
}
else if(str[i] == 'D')
{
dbg("(%d):\n", __LINE__);
down(num, &start, &cur);
}
}
if(num > 4)
{
printf("%d %d %d %d\n%d\n", start, start%num+1, (start+1)%num+1, (start+2)%num+1, cur);
}
else
{
for(i=0; i<num; i++)
{
printf("%d ", (start-1+i)%num+1);
}
printf("\n%d\n", cur);
}
}
return 0;
}