菜鸡学C语言之真心话大冒险
题目描述
Leslie非常喜欢真心话大冒险的游戏。这一次游戏的规则有些不同。每个人都有自己的真心话,一开始每个人也都只知道自己的真心话。每一轮每个人都告诉指定的一个人他所知道的所有真心话,那么Leslie想知道,多少轮后他能知道所有人的真心话呢?题目保证数据有解。
输入
第一行一个数n,表示一共有n个人,编号为1~n, Leslie为第n个人。n<=1000
第二行有n个数,第i个数表示第i个人要传递真心话的对象。
输出
输出一个数x,表示第x轮后Leslie知道了所有的真心话。
输入样例
4
2 4 2 1
输出样例
2
题目链接:https://buaacoding.cn/problem/1971/index
写在前面:
相信有C语言基础的同学都不难理解递归。举个简单的例子:从前有座山,山里有座庙,庙里有个和尚,和尚在讲故事,从前有座山,山里有座庙,庙里有个和尚,和尚在讲故事,从前有座山...
递归是我们经常用到的算法,当熟悉递归的做法以及题目的思路时,递归经常可以简化代码量。当然,递归也有他的弊端,那就是递归是一个不断深入的过程,在这过程中它每次都需要开辟一块栈空间来存储,使得递归的运行效率通常较低。当然,理论上,每个递归算法都可以转化为非递归(循环)来实现。
题目分析:在每一轮当中,每个人告诉他要告诉的人他知道的真心话(好拗口)。
注意:在这一轮结束后,大家同时知道新的真心话。因为我在看有的代码时发现有同学用循环实现时通常会为大家知道真心话添加顺序,即在同一轮中,如果一个人知道新的真心话后,他接下来也会把这个真心话告诉他要告诉的人,但这其实是不对的。
思路:所有人中需要传递次数的最大值就是答案!
递归,看程序即可。
#include<stdio.h>
#define MAX 1005
#define max(a,b) (a>b?a:b)
int n, pass[MAX]; // pass数组用来存储他要告诉真心话的人
int fun(int x)
{
if(x == n)
return ;
return + fun(pass[x]);
}
int main()
{
int ans = ;
scanf("%d", &n);
for(int i = ; i <= n; i++)
scanf("%d", &pass[i]);
for(int i = ; i < n; i++)
ans = max(ans, fun(i));
printf("%d", ans);
return ;
}
菜鸡学C语言之真心话大冒险的更多相关文章
- 菜鸡学C语言之摸鱼村村长
题目描述 摸鱼村要选村长了! 选村长的规则是村里每个人进行一次投票,票数大于人数一半的成为村长. 然鹅摸鱼村的人都比较懒,你能帮他们写一个程序来找出谁当选村长吗? (每名村民的编号都是一个int范围内 ...
- 菜鸡学C语言之寻根溯源
题目描述 Mogg最近翻了翻自己家的族谱,想康康祖先是谁.但是族谱因为年久失修太乱了,他现在只整理出来了一系列父子关系,你能帮他找一找直系亲属中辈分最大的一位吗?(即父亲的父亲的父亲……) 输入 第1 ...
- android 真心话大冒险 摇色子
android 真心话大冒险 摇色子 软件
- ACM菜鸡退役帖——ACM究竟给了我什么?
这个ACM退役帖,诸多原因(一言难尽...),终于决定在我大三下学期开始的时候写出来.下面说两个重要的原因. 其一是觉得菜鸡的ACM之旅没人会看的,但是新学期开始了,总结一下,只为了更好的出发吧. 其 ...
- HDU 2064 菜鸡第一次写博客
果然集训就是学长学姐天天传授水铜的动态规划和搜索,今天讲DP由于困意加上面瘫学长"听不懂就是你不行"的呵呵传授,全程梦游.最后面对连入门都算不上的几道动态规划,我的内心一片宁静,甚 ...
- 菜鸡谈OO 第二单元总结
“欢迎来到(玄学)多线程的新世界” Homework1 单部傻瓜电梯调度 Part1 多线程设计策略 第一次学到了线程这个概念,与之前的编程体验大有不同.最大的区别在于从原本的线性发生程序变成了多个行 ...
- 一个数学不好的菜鸡的快速沃尔什变换(FWT)学习笔记
一个数学不好的菜鸡的快速沃尔什变换(FWT)学习笔记 曾经某个下午我以为我会了FWT,结果现在一丁点也想不起来了--看来"学"完新东西不经常做题不写博客,就白学了 = = 我没啥智 ...
- 小C的故事(快速学C语言,,,极速版!)
前几天这篇博客写了太多废话! 删啦~~. 本篇博客只是为chd A协的全嫩小鲜肉入门C语言的预科, 如果你在此处学习C语言, 不幸走火入魔, 小弱概不负责. //请直接随便找个C语言编译器,抄一下下面 ...
- 快看Sample代码,速学Swift语言(1)-语法速览
Swift是苹果推出的一个比较新的语言,它除了借鉴语言如C#.Java等内容外,好像还采用了很多JavaScript脚本里面的一些脚本语法,用起来感觉非常棒,作为一个使用C#多年的技术控,对这种比较超 ...
随机推荐
- Two (DP)
题意:求两串数字有多少个相同的子串,子串不要求连续. 思路:直接DP,dp[i][j] 代表A串长度为i.B串为j时满足条件的子串个数.转移dp[i][j] = dp[i -1][j] + dp[i] ...
- css基础教程
css规则有两个主要部分构成:选择器,以及一条或多条声明. 值的不同写法和单位: 可以使用十六进制设置颜色值:#ff0000; 为节约字节,使用css缩写形式:#f00: 类选择器:以一个点号显示. ...
- pgrep
优势:可以只显示进程号 pgrep -l 显示进程名
- An owner of this repository has limited the ability to open a pull request to users that are collaborators on this repository.
git 无法发起:pull request,提示:An owner of this repository has limited the ability to open a pull request ...
- Android的JSON数据解析
一. 使用原生方式解析 准备工作:准备一个布局文件,用来显示元数据与转换之后的数据 <?xml version="1.0" encoding="utf-8" ...
- LeetCode数组查找问题
简单的二分查找法:(Leetcode704): 注意条件(low<=high) public int search(int[] nums, int target) { int low=0; in ...
- java全角和半角转换
package test; public class HalfAndFullConverseUtil { /** * ASCII表中可见字符从!开始,偏移位值为33(Decimal) */ priva ...
- Prometheus监控学习笔记之Prometheus的Relabel,SD以及Federation功能
0x00 k8s 的监控设计 k8s 默认以及推荐的监控体系是它自己的一套东西:Heapster + cAdvisor + Influxdb + Grafana,具体可以看 这里 . 包括 k8s 自 ...
- Docker 运维高级应用管理
Docker 基本应用 1.Docker 介绍及安装 2.Docket 使用命令 3.Docker run命令参数整理 4.Docker 构建镜像 Docker Compose 高级应用 1.Doc ...
- OpenCV自带dnn的Example研究(2)— colorization
这个博客系列,简单来说,今天我们就是要研究 6个文件,看看在最新的OpenCV中,它们是如何发挥作用的. 在配置使用的过程中,需要注意使用较高版本的VS避免编译器兼容问题:由于DNN程序的运行依赖于训 ...