题目描述
桐桐最近在玩一个跳棋游戏,规则是:有个圆圈,分成N等分,顺时针标号为1到N。假设其中有些段的障碍。桐桐从1号段出发,每次顺时针跳K段,目标是跳到第Z号段,但过程中不能跳到障碍段上去。
假如,N=13,K=3,Z=9,则跳的路径上的段号为1,4,7,10,13,3,6和9,在此假设没有跳到障碍段上去。
现在请帮桐桐求出最小的K。
输入
第一行有整数N,Z和M(2≤N≤1000,2≤Z,0≤M≤N-2)。
N表示圆分成的段数,Z表示桐桐想跳到的目标段号,M表示障碍数。
第二行有M个数,表示有障碍的段号。段1和段Z保证没有障碍。
输出
一个数K。
输入样例#1
7 4 1 6 输入样例#2
9 7 2 2 3 输入样例#3
7 6 2 2 4 输出样例#1
1 输出样例#2
3 输出样例#3
5 ˼·
模拟!上!
#include<Algorithm> #include<Iostream> #include<Cstring> #include<Cstdio> int Ans,n,m,k,l; int A[1250]; bool F; int main() { scanf("%d%d%d",&n,&k,&m); if(m==n-2){printf("%d",k-1);return 0;} if(!m){printf("%d",1);return 0;} for(int i=1;i<=m;++i) { scanf("%d",&l); A[l]=1; } while(1) { Ans++; l=1; F=0; while(1) { l+=Ans; if(l>n)l=l-n; if(l==k){F=1;break;} if(A[l] || l==1)break; } if(F)break; } printf("%d",Ans); return 0; } 文章来源: https://blog.csdn.net/SSL_wujiajie/article/details/92113024