luogu--约瑟夫 指针实现

来源:互联网 发布:杭州恩牛网络 上市 编辑:程序博客网 时间:2024/06/16 03:44

题目背景

约瑟夫是一个无聊的人!!!

题目描述

n个人(n<=100)围成一圈,从第一个人开始报数,数到m的人出列,再由下一个人重新从1开始报数,数到m的人再出圈,……依次类推,直到所有的人都出圈,请输出依次出圈人的编号.

输入输出格式

输入格式:

n m

输出格式:

出圈的编号

输入输出样例

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

说明

你猜,你猜,你猜猜猜......

猜不着吧,我也不告诉你!!!




用的是指针写的约瑟夫,简单的指向问题,指针移动停止的地方进行输出 并标记为0 ,k代表相隔几个输出一个元素,其中加了一个特判, 当n=0的时候,直接结束。代码如下:

#include<iostream>using namespace std;int main(){    int i,k,m,n,num[110],*p,c;//    cout<<"input number of person:n=";    cin>>n>>c;    p=num;    for(i=0;i<n;i++)    {        *(p+i)=i+1;    //    cout<<*(p+i)<<" ";    }//    cout<<endl;    //cout<<"^^^^^^^^以上为指针所指向每个地址所赋的值^^^^^^^^^======================"<<endl;    i=0;k=0;m=0;    if(n==0)        return 0;    while(m<n-1)    {    //    cout<<"以k来计数当到了k=c进行另一个条件,当前的k值:"<<k<<"++++++++++++++++++++++++++++++++"<<endl;        if(*(p+i)!=0)   k++;        if(k==c)        {            cout<<*(p+i)<<" ";            *(p+i)=0;            k=0;            //cout<<k<<"从新计数"<<endl;            m++;        //    cout<<m<<"m为消掉的数 用作外循环的终止条件"<<endl;        }        i++;   //是指针不断指向下一个值        if(i==n)   //当i到n时将其返回0 从新进行向下搜寻            i=0;    }    while(*p==0)      //用指针指向空间为0 来计数 直到不为0时便找到了最后一个没有被消掉的数        p++;    cout<<*p<<endl;return 0;}


原创粉丝点击