• 华为2013校招之哈工大威海 上机试题之一:报数问题:设有N 个人围坐一圈并按顺时针方向从1 到N 编号,从第S个人开始进行1 到M报数,报 数到第 M个人时,此人出圈,再从他的下一个人重新开始1 到 M的报数,如此进行下去直 到所有的人都出圈为止。现要打印出出圈次序。


    1.  报数游戏

    问题描述: 

    设有个人围坐一圈并按顺时针方向从编号,从第S个人开始进行M报数,报

    数到第 M个人时,此人出圈,再从他的下一个人重新开始 M的报数,如此进行下去直

    到所有的人都出圈为止。现要打印出出圈次序。  

    要求实现函数: 

    void circle_sort (int n, int s, int m, int *p)

    输入:游戏总人数  s 报数的起始编号  m 报数的数值    

    输出:指向长度为n的数组,出圈次序保存在 p指向的数组中

    示例 

       n=7 s=2 m=3  出圈次序为:4 7 3 1 6 2 5

       n=3 s=1 m=2  出圈次序为:2 1 3  

    // tst.cpp : 定义控制台应用程序的入口点。
    //

    #include "stdafx.h"


    #include<iostream>
    using namespace std;

    /*void circle_sort (int n, int s, int q, int *p)
    {


    }*/
    int main()
    {
    typedef struct man{
    int num;
    struct man *next;
    }node;

    node *head,*s,*p_p,*p_q;
    int n =3,k=1,m=2;
    head = (node*)malloc(sizeof(node));
    p_p = head;
    for (int i=1;i<=n;i++)
    {
    s = (node *)malloc(sizeof(node));//申请节点空间
    s->num = i;//填数
    //cout<<"s->data:"<<s->num<<" ";
    //连接节点
    p_p->next = s;
    p_p = s;
    }

    p_p->next = head->next; //最后一个指向第一个节点
    //cout<<"第一个节点是:"<<p_p->next->num<<" ";
    //////////////////////////////////////////////////////////////////////////
    //找到开始位置
    for (int j=0;j<k;j++)
    {
    p_p=p_p->next;
    }
    //cout<<"开始计数位置:"<<p_p->num<<" ";

    while(n)
    {

    for (int j=1;j<m;j++)
    {
    p_p=p_p->next;
    //cout<<"移动后依次为:"<<p_p->num<<" ";
    }
    cout<<"选中的数是:"<<p_p->num<<" ";
    p_q = p_p->next;
    p_p->num = p_q->num;
    p_p->next = p_q->next;
    free(p_q);
    n--;
    }

    }

  • 相关阅读:
    吉他音阶笔记(以C调为基准)
    小程序页面跳转问题
    Adobe-premierej剪辑视频分辨率问题及格式转换画面质量分辨率
    关于ps抠图问题,制作公章,公章的复制
    premiere视频剪辑关于导出视屏分辨率的问题
    最后一个单词的长度
    10.两个链表的交叉
    软件工程——个人总结
    软件工程——团队专业4
    软件工程——团队答辩
  • 原文地址:https://www.cnblogs.com/hackerl/p/3318082.html
Copyright © 2020-2023  润新知