算法:狐狸吃兔子问题(约瑟环)

来源:互联网 发布:淘宝买家v4是什么级别 编辑:程序博客网 时间:2024/04/28 01:26

围绕着山顶有10个洞,一只狐狸和一只兔子各住一个洞。狐狸总想吃掉兔子。一天兔子对狐狸说:“你想吃我有一个条件,先把洞从1~10编上号,你从10号洞出发,先到1号洞找我;第二次隔1个洞找我,第三次隔2个洞找我,以后依此类推,次数不限。若能找到我,你就可以饱餐一顿。不过在没有找到我以前不能停下来。”狐狸满口答应就开始找了,它从早到晚找了N次洞,累得昏了过去也没有找到兔子。请问,狐狸昏倒在哪一个洞里?免子可能躲在哪些洞里?

输入

输入一个正整数N(1<=N<=1000)

输出

第一行:输出兔子可以躲在的洞的编号 第二行:狐狸昏倒时所在洞的编号

样例输入 3
样例输出
2 4 5 7 8 9 10
6

分析:

  1. d1 = 1 => 1
  2. d2 = 1 + 2 => 3
  3. d3 = 3 + 3 => 6
  4. d4 = 6 + 4 => 10
  5. d5 = 10 + 5 => 15 => 5
  6. d6 = 5 + 6 => 11 => 1
    …….
    以此类推
    可以得出 dn = (n-1+n) %10
    代码如下:
# include "stdio.h"isDay(int last, int day){    last = (last+day)%10;    // 求余    if(last == 0)        return 10;    else        return last;}int main(){    int wo[11] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; // 对兔子窝的原始状态进行标记    int days;    int dong = 10, i;    printf("请输入天数:");    scanf("%d", &days);    for (i=1; i<=days; i++)    {        dong = isDay(dong, i);        wo[dong] = 1;    }    for (i=1; i<11; i++)       {        if(wo[i]==0)//浪没有找过的窝            printf("%d ", i);    }    printf("\n%d    ",dong);   //最后一天浪所在的洞    return  0;}
原创粉丝点击