/**********************************************************************************************************************************一座山上周围有n个洞,顺时针编号为0,1,2,……,n-1。而一只狼从0号洞开始,顺时针方向计数,每遇到m个洞就进洞找兔子,例如n=5 m=3 狼经过的洞依次为0,3,1,4,2,0输入n、m。试问兔子有没有幸免的机会? 编写一个完整的程序 n m 由scanf输入 有幸免的机会输出Y没有输出N ***********************************************************************************************************************************/#include<iostream>using namespace std;/*因为题目没给出n的范围,所以我只设了长度为1001只能测n<=1000的情况 具体情况请题主自由设定tag长度*/int deal(int m,int n,int tag[]){ int drift(m); int count(1); while(drift!=0) { if(drift>=n) drift=drift%n; if(0==tag[drift]) { count++; tag[drift]=1; } drift+=m; if(drift>=n) drift=drift%n; } if(count==n) return 0; else return 1;} void main(){ int m,n; cout<<"请输入m"<<endl; cin>>m; cout<<"请输入n"<<endl; cin>>n; int tag[1001]; memset(tag,0,sizeof(tag)); if(deal(m,n,tag)) cout<<"Y"<<endl; else cout<<"N"<<endl;} /*上面这个算法是朋友的 觉得挺有趣 借了过来*/

评论