目前位置: VCer资源中心 >>> VCer文章 >>> C++/MFC基础

[本帖已阅读1142次 分值80 回复0次] 张贴资源 发回信箱 控制面板

Josephu 问题

提供者:oases2008 张贴时间:2005-01-01 00:00:00.0 出处:http://www.jblook.cn 作者:不祥

Josephu 问题(2005-01-01 00:00:00.0)


oases2008


 
级别: VCer小兵
头衔: VCer会员

经验: 258
作品: 3
分会: 华北分会
注册: 2007-01-25 12:00:19.0
登录: 2007-10-30 16:38:36.0
为:设编号为1,2,… n的n个人围坐一圈,约定编号为k(1<=k<=n)的人从1开始报数,数到m 的那个人出列,它的下一位又从1开始报数,数到m的那个人又出列,依次类推,直到所有人出列为止,由此产生一个出队编号的序列。

数组实现:

#i nclude <stdio.h>

#i nclude <malloc.h>

int Josephu(int n, int m)

{

  int flag, i, j = 0;

  int *arr = (int *)malloc(n * sizeof(int));

  for (i = 0; i < n; ++i)

    arr = 1;

  for (i = 1; i < n; ++i)

  {

    flag = 0;

    while (flag < m)

    {

      if (j == n)

        j = 0;

      if (arr[j])

        ++flag;

      ++j;

    }

    arr[j - 1] = 0;

    printf("第%4d个出局的人是:%4d号\n", i, j);

  }

  free(arr);

  return j;

}

int main()

{

  int n, m;

  scanf("%d%d", &n, &m);

  printf("最后胜利的是%d号!\n", Josephu(n, m));

  system("pause");

  return 0;

}

链表实现:

#i nclude <stdio.h>

#i nclude <malloc.h>

typedef struct Node

{

  int index;

  struct Node *next;

}JosephuNode;

int Josephu(int n, int m)

{

  int i, j;

  JosephuNode *head, *tail;

  head = tail = (JosephuNode *)malloc(sizeof(JosephuNode));

  for (i = 1; i < n; ++i)

  {

    tail->index = i;

    tail->next = (JosephuNode *)malloc(sizeof(JosephuNode));

    tail = tail->next;

  }

  tail->index = i;

  tail->next = head;

 

  for (i = 1; tail != head; ++i)

  {

    for (j = 1; j < m; ++j)

    {

      tail = head;

      head = head->next;

    }

    tail->next = head->next;

    printf("第%4d个出局的人是:%4d号\n", i, head->index);

    free(head);

    head = tail->next;

  }

  i = head->index;

  free(head);

  return i;

}

int main()

{

  int n, m;

  scanf("%d%d", &n, &m);

  printf("最后胜利的是%d号!\n", Josephu(n, m));

  system("pause");

  return 0;

} [ 本帖最后由 oases2008 于 2007-2-3 19:27 编辑 ]

本文转载自IT网it求职笔试真题库网

注:转载文章需注明来源:VCer.net 文章地址:http://vcer.net/1000000000164.html

  如果你觉得VCer.net不错,而且你愿意为VCer.net捐赠一元钱,那么点击后面的捐赠按钮吧:) vcer.net捐赠

[回复该贴] [加入个人书签]
[投票结果]

A: 评分 10 0% (0 票)
B: 评分 5 0% (0 票)
C: 评分 0 0% (0 票)
D: 评分 -5 0% (0 票)
E: 评分 -10 0% (0 票)