2020oop第二次7-3 报数 (10分)+出色的物理引擎

输入两个正整数 n 和 m( (1<m<n<=50)),有 n 个人围成一圈,按顺序从 1 到 n 编号。从第一个人开始报数,报数 m 的人退出圈子,下一个人从 1 开始重新报数,报数 m 的人退出圈子。如此循环,直到留下最后一个人。请按退出顺序输出退出圈子的人的编号,以及最后一个人的编号。

提示:将每个人的编号存入数组,从第一个人开始报数,输出报数 m 的人的编号,并将该编号清除为0,重复这样的操作直至只剩下一个不为0的数,该数就是最后一个人的编号。

输入输出示例:括号内为说明,无需输入输出

输入样例:

5               (n个人报数,n=5)
3               (报数m=3)

输出样例:

No1: 3          (第1个退出圈子的人编号是3)
No2: 1	        (第2个退出圈子的人编号是1)
No3: 5	        (第3个退出圈子的人编号是5)
No4: 2	        (第4个退出圈子的人编号是2)
Last No is: 4   (最后一个人的编号是4)

(数组+循环实现):

#include<iostream>
using namespace std;
int main()
{
    int n,m,i,j,k=0,t,num[60],p=1;
    cin>>n>>m;
    for(i=1;i<=n;i++)
        num[i]=i;
    t=n;
    while(n!=1)
    {
        for(j=1;j<=t;j++)
        {
            if(num[j]!=0) k++;
            if(k==m){
                cout<<"No"<<p<<": "<<j<<endl;
                p++;
                num[j]=0;
                k=0;
                n--;
            }
            
        }
    }
    for(i=1;i<=t;i++)
        if(num[i]!=0)
        cout<<"Last No is: "<<i;
    return 0;
}

出色的物理引擎(同类型的题目)

卡罗拉最近沉迷于ark游戏,游戏中的地图上有n个浮空的石头围成了一圈,在优秀的物理引擎支持下,这些石头会自动落下。她发现石头落下的顺序是有规律的。一共有n个石头,从第一块石头开始数,数到第m个石头,那块就是第一个落下的石头;之后从第一个落下的石头后一个重新从1开始数,同样数到第m个石头,那个就是第二个落下的石头;以此类推。为了方便,对这些石头从1开始编号。卡罗拉现在想知道最后落下的是那一块石头?

输入格式:

输入包含两个整数n和m (1<=m,n<=1000)。

输出格式:

输出一 个整数,代表最后落下的石头的编号。

输入样例:

10 3

输出样例:

4

用链表实现

#include<iostream>
using namespace std;
typedef struct p{
    int num;
    struct p *next;
}ss;
int m,n;
void creat()
{
    int i;
    ss* p1,*p2;
    ss *a,*b,*head=NULL;
    b=new ss;
    for(i=0;i<n;i++){
        a=new ss;
            a->num=i+1;
        if(i==0){
            head=a;
            a->next=head;
        }    
        else{
            a->next=head;
            b->next=a;
        }
        b=a;
    }
    p2=b;
    int count=n;
    while(count!=1)
    {
        for(i=0;i<m;i++)
        {
            if(i==m-1)
            {
                p2->next=p1->next;
                count--;
                
            }
            else {
                p2=p2->next;
                p1=p2->next;
            }
        }    
    }
    cout<<p2->num;  
}
int main(){
    cin>>n>>m;
    creat();
    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_45788060/article/details/108133942