时间限制: 1Sec 内存限制: 128MB
题目描述
n 个人围成一圈, 并依次编号1~n,。从编号为1 的人开始,按顺时针方向每隔一人选出一个,剩下的人重新围成一圈,如此循环直到剩下两人,这剩下的两人就是幸运儿。如果你想成为最后两个幸运儿,请问开始时应该站在什么位置?(设3<=n<=50)
输入
有多个测试序列。每行是开始时的人数n
输出
第1 行是选出顺序,第2 行是两名幸运儿的开始位置(按升序排列),位置编号之间用一个空格分开。
样例输入
12
20
样例输出
2 4 6 8 10 12 3 7 11 5
1 9
2 4 6 8 10 12 14 16 18 20 3 7 11 15 19 5 13 9
1 17
Code
读题
题目中心句:从编号为1 的人开始,按顺时针方向每隔一人选出一个,剩下的人重新围成一圈,如此循环。
断句1:从编号为1 的人开始 // 按顺时针方向每隔一人选出一个,剩下的人重新围成一圈 // 如此循环。
循环这句话:按顺时针方向每隔一人选出一个,剩下的人重新围成一圈
短句2:从编号为1 的人开始 ,按顺时针方向每隔一人选出一个,剩下的人重新围成一圈 // 如此循环。
循环这句话:从编号为1 的人开始 ,按顺时针方向每隔一人选出一个,剩下的人重新围成一圈
两种断句方式对应两种代码
Code 1 不符合样例,对应断句1
即每跳出一人,剩下的人立即重新围成一圈,从下一个人开始继续数数
也就是说1号可能会不在最后的两个人中
#include<stdio.h>
int main()
{
int vi[51]={
0},i,n,rm;
while(scanf("%d", &n)+1){
for(i=1,rm=n;i<=n;i