一道思维题 &&递归改循环


思路:
比如5 2
12345--> 1245 从3开始,这时候5变成了1.剩下4512,对应1234.只需要找到现在n-1,k中的数对应原来的编号的映射。
比如1-->3 是1+2 mod 5,4-->1是4+2 mod 5. //大雾
应该是4还原成1,4+k+1(3) mod 5=1 , 1还原成4是1+3 mod 5. 2还原成5是 2+k+1=5 mod n =0.(这里引出下面的问题)
这就形成了递归。
这样递归到最后剩一个数,结果就是这个数。
这样的问题是mod n后,n很大时会有数从0开始,
解决办法1:返回时+1
#include <iostream>
using namespace std;
int A(int n, int k) {
if ( n == 1){
return 1;
}
else{
return (A(n-1,k)+k)%n+1;
}
}
int main()
{
int n, k;
while (true)
{
cin >> n;
cin >> k;
cout << A(n,k);
}
system("pause");
return 0;
}
解决办法2:将所有数-1,最后加一 (假设所有数从0开始,12345-->01234)
#include <iostream>
using namespace std;
int A(int n, int k) {
if ( n == 1){
return 0;
}
else{
return (A(n-1,k)+k)%n;
}
}
int main()
{
int n, k;
cin >> n;
cin >> k;
cout << A(n,k+1) + 1;
return 0;
}
这样栈会溢出(n很大的时候)
改成循环
(解法一)
#include <iostream>
using namespace std;
int A(int n, int k) {
int ans=1,s=1;
while(s<n){
s++;
ans=ans+k;
ans=ans%s;
ans++;
}
return ans;
}
int main()
{
int n, k;
cin >> n;
cin >> k;
cout << A(n,k) ;
system("pause");
return 0;
}
(解法2)
#include <iostream>
using namespace std;
int A(int n, int k) {
int ans=0,s=1;
while(s<n){
s++;
ans=ans+k;
ans=ans%s;
}
return ans;
}
int main()
{
int n, k;
cin >> n;
cin >> k;
cout << A(n,k+1) + 1;
system("pause");
return 0;
}
一道思维题 &&递归改循环的更多相关文章
- hdu2094—看似拓扑实际上是一道思维题
HDU2094 产生冠军 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2094 题意:中文题,就不解释了.题意已经非常清楚了. 这道题的看起来像是一 ...
- Report,又是一道思维题
题目: Each month Blake gets the report containing main economic indicators of the company "Blake ...
- Problem C Emergency Evacuation 一道思维题
题目描述 输入 输出 样例 样例输入 样例输入一 样例输入二 样例输出 样例输出一 9 样例输出二 1008 一句话题意:给你一个车厢和一些人,这些人都坐在座位上,求这些人全部出去的时间最小值. 分析 ...
- BZOJ4401: 块的计数 思维题
Description 小Y最近从同学那里听说了一个十分牛B的高级数据结构——块状树.听说这种数据结构能在sqrt(N)的时间内维护树上的各种信息,十分的高效.当然,无聊的小Y对这种事情毫无兴趣,只是 ...
- CodeForces - 631C ——(思维题)
Each month Blake gets the report containing main economic indicators of the company "Blake Tech ...
- CodeForces - 1102A(思维题)
https://vjudge.net/problem/2135388/origin Describe You are given an integer sequence 1,2,-,n. You ha ...
- 7月15日考试 题解(链表+状压DP+思维题)
前言:蒟蒻太弱了,全打的暴力QAQ. --------------------- T1 小Z的求和 题目大意:求$\sum\limits_{i=1}^n \sum\limits_{j=i}^n kth ...
- 又一道简单题&&Ladygod(两道思维水题)
Ladygod Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Submit S ...
- 计蒜客 28319.Interesting Integers-类似斐波那契数列-递推思维题 (Benelux Algorithm Programming Contest 2014 Final ACM-ICPC Asia Training League 暑假第一阶段第二场 I)
I. Interesting Integers 传送门 应该是叫思维题吧,反正敲一下脑壳才知道自己哪里写错了.要敢于暴力. 这个题的题意就是给你一个数,让你逆推出递推的最开始的两个数(假设一开始的两个 ...
随机推荐
- 修改conda和pip源
修改conda源为中科大源 Windows修改C:\Users\user(user替换为当前登陆系统的用户)目录下的.condarc文件 Linux修改家目录下的.condarc文件 channels ...
- 24V转3.3V稳压芯片,高效率同步降压DC-DC变换器3A输出电流
PW2312是一个高频,同步,整流,降压,开关模式转换器与内部功率MOSFET.它提供了一个非常紧凑的解决方案,以实现1.5A的峰值输出电流在广泛的输入电源范围内,具有良好的负载和线路调节. PW23 ...
- PAT练习num3-跟奥巴马一起学编程
美国总统奥巴马不仅呼吁所有人都学习编程,甚至以身作则编写代码,成为美国历史上首位编写计算机代码的总统.2014 年底,为庆祝"计算机科学教育周"正式启动,奥巴马编写了很简单的计算机 ...
- Python Debug工具
最近在github上冒出了一个python的debug神器PySnooper,号称在debug时可以消灭print.那么该工具有哪些优点呢,如何使用该工具呢.本文就介绍该工具的优缺点和使用方式. 前言 ...
- U盘UEFI+GPT模式安装CentOS7.X系统
1.制作CentOS7安装盘 还是老套路,开局先制作安装盘,UltraISO软碟通,上图 (1) 打开UltraISO软件,选择"文件"-> "打开" ...
- Linux中让终端输入变为非阻塞的三种方法
介绍 在linux下每打开一个终端,系统自动的就打开了三个文件,它们的文件描述符分别为0,1,2,功能分别是"标准输入"."标准输出"和"标准错误输出 ...
- etcd 与 Zookeeper、Consul 等其它 kv 组件的对比
基于etcd的分布式配置中心 etcd docs | etcd versus other key-value stores https://etcd.io/docs/v3.4.0/learning/w ...
- Property attribute.
class property(object): """ Property attribute. fget function to be used for getting ...
- Linux网络数据包的揭秘以及常见的调优方式总结
https://mp.weixin.qq.com/s/boRWlx1R7TX0NLuI2sZBfQ 作为业务 SRE,我们所运维的业务,常常以 Linux+TCP/UDP daemon 的形式对外提供 ...
- 一文带你看遍 JDK9~14 的重要新特性!
Java9 发布于 2017 年 9 月 21 日 .作为 Java8 之后 3 年半才发布的新版本,Java 9 带 来了很多重大的变化其中最重要的改动是 Java 平台模块系统的引入,其他还有诸如 ...