zoukankan      html  css  js  c++  java
  • circle踢人(约瑟夫环) c++

    这里更新指针法,真的每句都是坑

    (寥寥数十句,句句都是坑)

     1 //
     2 // Created by snnnow on 2020/4/12.
     3 //question:转圈,一共N个人,数到M的出列,求最后一个人的编号
     4 //这个题学到了一种新的方法,用指针(用数组实现)
     5 //初始条件每一个数组存放的数是他的下一位数,如a[3]=4;那么a[a[j]]就是下一位的下一位
     6 //去掉人以后,只需要把这个人的上一个指向它的指针换成这个人所指向的指针(也就是说,没人指向它,它就没有了)
     7 
     8 //注意一个问题:不要把初始的n改变掉(你应改另设一个初始值为N的数,作为计数器)
     9 
    10 #include <iostream>
    11 using  namespace std;
    12 int main(){
    13     int n,m;
    14     cin >> n >> m;
    15     int j = n;
    16     int k = 1;
    17     int p = 0;
    18     int ans[10010];
    19     for (int i = 1; i < n; ++i) {//注意是从一开始的
    20         ans[i] = i + 1;//赋值到下一位
    21 
    22     }
    23     ans[n] = 1;//注意第一个
    24 
    25     while(p < n){
    26         while(k < m){//这个地方要注意,这里只循环了n-1次,循环的最后一次在下面
    27             j = ans[j];//指针在移动啊~就相当于j在一直加
    28             k++;
    29         }
    30         cout<<ans[j]<<" ";//这里相当于循环的最后一次(ans[j]可以看做j的下一位啊)
    31         p++;
    32         ans[j] = ans[ans[j]];
    33         k = 1;
    34     }
    35     //小白菜曾尝试改代码,但是这样做是不对的
    36     //因为不要忘了ans[j-1]...说不定j-1=0就凉了
    37 //    while(p < n){
    38 //        while(k <= m){
    39 //            j = ans[j];
    40 //            k++;
    41 //        }
    42 //        cout<<j<<" ";
    43 //        p++;
    44 //        ans[j-1] = ans[j];
    45 //        k = 1;
    46 //    }
    47 
    48 }
  • 相关阅读:
    【java】对象赋值给另一个对象
    spring boot系列(五)spring boot 配置spring data jpa (查询方法)
    Spring Data JPA 查询
    Spring Data JPA 介绍
    OpenID简介
    OAUTH协议介绍
    URL encoding(URL编码)
    RESTful 介绍
    spring boot系列(四)spring boot 配置spring data jpa (保存修改删除方法)
    spring boot 启动报 java.lang.NoClassDefFoundError: ch/qos/logback/core/spi/LifeCycle 错误
  • 原文地址:https://www.cnblogs.com/zhmlzhml/p/12689537.html
Copyright © 2011-2022 走看看