题目描述
题目是:在一个有N个环形洞中,兔子躲进其中一个,狼先到第一个,没有找到,然后第三个,也没有找到,再到第六个,第十个.....以此类推,每次在前面的基础上加一个,最终狼没追到兔子.问兔子可能在那个洞里?
输入
输入N 其中 1<=n<=100
输出
输出狼找不到的洞的编号,每个号码占一行
样例输入
10
样例输出
2 4 7 9
提示
解题思路基本就按题目说的来;每次加1,就是1,3,6,10。。。
终止条件就是当再次从起点1位置开始的时候,就是终止条件了,也就是说,当狼第二次到起点开始继续找兔纸,重复从位置一开始的动作的时候,即可终止循环;
因此,需要每次开始的位置判断是否是位置1,而且经过两次;
import java.util.*; public class A1091 { public static void main(String[] args) { Scanner in=new Scanner(System.in); int n=in.nextInt();int[] ar=new int[n+1]; int sum=0; for(int i=1;;i++) { sum+=i; int t=sum%n;//获取在哪个位置 if(t==1&&ar[t]>=2) {//判断是否第二次在1位置上 break; }else if(t==0&&sum==n) {//处理终止位置与n的相同问题,(处理当n=sum,取余就会变0) ar[n]++; }else { ar[t]++; } } for(int i=1;i<n;i++) { if(ar[i]==0) { System.out.println(i); } } } }