算法 - n个数字形成的圆圈中循环删除第m个数字(C++)
分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请点击http://www.captainbed.net
/** n个数字形成的圆圈中循环删除第m个数字 - C++ - by Chimomo** 题目:n个数字(0, 1, … , n-1)形成一个圆圈。从数字0开始,每次从这个圆圈中删除第m个数字(第一个为当前数字本身,第二个为当前数字的下一个数字)。* 当一个数字删除后,从被删除数字的下一个继续删除第m个数字。求出在这个圆圈中剩下的最后一个数字。** Answer:* The keys are:* 1) If we shift the ids by k, namely, start from k instead of 0, we should add the result by k%n.* 2) After the first round, we start from (k+1)(possibly % n) with n-1 elements,* that is equal to an (n-1) problem while start from (k+1)th element instead of 0,* so the answer is (f(n-1,m)+(k+1))%n.* 3) Set k = m-1, so f(n,m) = (f(n-1,m)+m)%n. Obviously, f(1,m) = 0.* Now this is an O(n) solution.*/#include <iostream>
#include <stdio.h>using namespace std;int f(int n, int m) {int fn = 0;for (int i = 2; i <= n; i++) {fn = (fn + m) % i;}return fn;
}int main(int argc, char *argv[]) {cout << f(100, 66) << endl;return 0;
}// Output:
/*
77*/
算法 - n个数字形成的圆圈中循环删除第m个数字(C++)相关推荐
- 算法 n个数字形成的圆圈中循环删除第m个数字 C++
分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! //** ...
- 用1、2、3、4、5、6、7、8、9这9个数字,填入□ 中使等式□□×□□□ = □□□□ 成立,每个数字恰好只用一次。
用1.2.3.4.5.6.7.8.9这9个数字,填入□ 中使等式□□×□□□ = □□□□ 成立,每个数字恰好只用一次. 以下是所有的7 个答案供参考: 12*483=5796 18*297=5346 ...
- JAVA中循环删除list中元素的方法总结
原文:http://www.cnblogs.com/aspirant/p/7900854.html 印象中循环删除list中的元素使用for循环的方式是有问题的,但是可以使用增强的for循环,然后今天 ...
- java 删除list元素_JAVA中循环删除list中元素的方法总结
印象中循环删除list中的元素使用for循环的方式是有问题的,但是可以使用增强的for循环,然后今天在使用时发现报错了,然后去科普了一下,再然后发现这是一个误区.下面就来讲一讲..伸手党可直接跳至文末 ...
- java list 范围删除_JAVA中循环删除list中元素(移除list两时间范围外的元素)
印象中循环删除list中的元素使用for循环的方式是有问题的,但是可以使用增强的for循环,然后今天在使用时发现报错了,然后去科普了一下,再然后发现这是一个误区.下面就来讲一讲..伸手党可直接跳至文末 ...
- Java中循环删除list中元素的方法总结(总结)
印象中循环删除list中的元素使用for循环的方式是有问题的,但是可以使用增强的for循环,然后在今天使用的时候发现报错了,然后去科普了一下,发现这是一个误区.下面我们来一起看一下. Java中循环遍 ...
- 【算法-剑指 Offer】62. 圆圈中最后剩下的数字(环形链表;约瑟夫环;动态规划)
剑指 Offer 62. 圆圈中最后剩下的数字 - 力扣(LeetCode) 发布:2021年9月12日12:18:52 问题描述及示例 0,1,···,n-1这n个数字排成一个圆圈,从数字0开始,每 ...
- JAVA中循环删除集合中元素的方法总结
一.list集合循环删除元素 1.通过普通的for删除删除符合条件的多个元素 for(int i=0;i<list.size();i++){if(list.get(i).equals(" ...
- List中循环删除元素
在Java中,因为List接口有remove()这个方法,我们只需要调用remove()方法,就可以删除List中的某个元素. 但是在for循环中用remove()就不太行了 根据面向百度开发的经验, ...
最新文章
- Kali Linux***测试
- appearance 设置公共属性
- Linux入门:部署JavaWeb项目
- FATFS文件系统框架及源码分析
- DELPHI的DBGRID有两个难点
- HikariConfig配置详解
- hybris backoffice和产品主数据相关的一些sample data
- 前端学习(1986)vue之电商管理系统电商系统之建立新分支
- Ajax用证书调用,跨域的jQuery AJAX调用,带证书(Cross domain jQuery ajax call
- PTA编程总结3:抓老鼠
- NYOJ105 - 九的余数
- mybatis中useGeneratedKeys和keyProperty的作用
- 2017-3-17 SQL server 数据库 视图,事务,备份还原,分离附加
- 测试环境下将centos6.8升级到centos7的操作记录(转)
- 嵌入式Littlevgl之linux移植
- linux bind日志级别,Bind日志配置。
- 代码风格自动化(二)——husky + lint-staged
- Java线程池的四种创建方式
- 一款网课学习辅助软件
- Centos用mail命令登录163邮箱发邮件