思路:

比如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;
}

一道思维题 &&递归改循环的更多相关文章

  1. hdu2094—看似拓扑实际上是一道思维题

    HDU2094  产生冠军 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2094 题意:中文题,就不解释了.题意已经非常清楚了. 这道题的看起来像是一 ...

  2. Report,又是一道思维题

    题目: Each month Blake gets the report containing main economic indicators of the company "Blake ...

  3. Problem C Emergency Evacuation 一道思维题

    题目描述 输入 输出 样例 样例输入 样例输入一 样例输入二 样例输出 样例输出一 9 样例输出二 1008 一句话题意:给你一个车厢和一些人,这些人都坐在座位上,求这些人全部出去的时间最小值. 分析 ...

  4. BZOJ4401: 块的计数 思维题

    Description 小Y最近从同学那里听说了一个十分牛B的高级数据结构——块状树.听说这种数据结构能在sqrt(N)的时间内维护树上的各种信息,十分的高效.当然,无聊的小Y对这种事情毫无兴趣,只是 ...

  5. CodeForces - 631C ——(思维题)

    Each month Blake gets the report containing main economic indicators of the company "Blake Tech ...

  6. CodeForces - 1102A(思维题)

    https://vjudge.net/problem/2135388/origin Describe You are given an integer sequence 1,2,-,n. You ha ...

  7. 7月15日考试 题解(链表+状压DP+思维题)

    前言:蒟蒻太弱了,全打的暴力QAQ. --------------------- T1 小Z的求和 题目大意:求$\sum\limits_{i=1}^n \sum\limits_{j=i}^n kth ...

  8. 又一道简单题&&Ladygod(两道思维水题)

    Ladygod Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Submit S ...

  9. 计蒜客 28319.Interesting Integers-类似斐波那契数列-递推思维题 (Benelux Algorithm Programming Contest 2014 Final ACM-ICPC Asia Training League 暑假第一阶段第二场 I)

    I. Interesting Integers 传送门 应该是叫思维题吧,反正敲一下脑壳才知道自己哪里写错了.要敢于暴力. 这个题的题意就是给你一个数,让你逆推出递推的最开始的两个数(假设一开始的两个 ...

随机推荐

  1. 关于阿里云服务器安装了Apache开放80端口访问不了网页

    先用netstat -tlunp查看80端口是否打开,再关闭服务器的防火墙,可以用 systemctl status firewalld 查看防火墙状态  systemctl stop firewal ...

  2. 2、fork函数与进程ID

    1. fork函数 fork函数用于克隆一份当前的进程资源,调用fork函数之后,进程一分为二,并且两个进程的资源是一样的(只是资源内容完全一样,并不是同一份资源).fork函数的函数原型为:pid_ ...

  3. 深圳某小公司面试题:AQS是什么?公平锁和非公平锁?ReentrantLock?

    AQS总体来说没有想象中那么难,只要了解它的实现框架,那理解起来就不是什么问题了. AQS在Java还是占很重要的地位的,面试也是经常会问. 目前已经连载11篇啦!进度是一周更新两篇,欢迎持续关注 [ ...

  4. 网络编程 — Linux TCP服务端和客户端

    1. 服务端 #include <stdlib.h> #include <string.h> #include <errno.h> #include <sig ...

  5. Tensorflow-各种优化器总结与比较

    优化器总结 机器学习中,有很多优化方法来试图寻找模型的最优解.比如神经网络中可以采取最基本的梯度下降法. 梯度下降法(Gradient Descent) 梯度下降法是最基本的一类优化器,目前主要分为三 ...

  6. Spark 应用监控告警-Graphite_exporter

    Spark 应用监控告警-Graphite_exporter Spark监控和工具 Web界面 事后查看 REST API 度量 高级工具 一.下载graphite_exporter 1.1 修改gr ...

  7. linux shell 判断空字符串的几种方法!

    在书写linux shell 脚本我们经常会遇到,对一个字符串是否为空进行判断,下面我对几种常用的方法进行了一个总结: 1.-z判断 -z string True if the length of s ...

  8. UI中的事件系统EventSystem

    一.EventSystem简介 用于处理事件的分发和相应的系统,创建画布的同时会创建事件系统 二.UGUI实现事件系统的3种方式 1.使用组件eventTrigger(不推荐),拖动赋值 2.代码添加 ...

  9. docker 运用

    本文采用centos7,记录docker的简单运用方式 https://www.runoob.com/docker/docker-container-usage.html 1.安装odcker 2.启 ...

  10. linux(1)Mac上传文件到Linux服务器

    前言 我们使用mac时,想让本地文件上传至服务器,该怎么办呢 windows系统,我们可以使用xftp或者rz命令,那么mac呢? mac系统,我们可以使用sftp.scp或者rz命令,本文介绍sft ...