首页 > 其他分享 >C语言学习记录---函数4

C语言学习记录---函数4

时间:2023-09-24 21:01:13浏览次数:43  
标签:char 台阶 函数 int hanoi C语言 --- printf 盘子


汉诺塔问题(递归)

#include <stdio.h>

// 定义汉诺塔函数
void hanoi(int n, char A, char B, char C) {
  if (n == 1) {
    printf("将盘子从 %c 移动到 %c\n", A, C);
  } else {
    //将 n-1 个盘子从 A 移动到 B
    hanoi(n - 1, A, C, B);         

    //将第 n 个盘子从 A 移动到 C
    printf("将盘子从 %c 移动到 %c\n", A, C);       

    //将 B 上的 n-1 个盘子移动到 C
    hanoi(n - 1, B, A, C);         
  }
}

int main() {
  int n;
  printf("请输入盘子的数量:");
  scanf("%d", &n);

  // 调用汉诺塔函数
  hanoi(n, 'A', 'B', 'C');

  return 0;
}

如果一次只能移动一个

#include <stdio.h>

void hanoi(int n, char source, char aux, char dest) {
  if (n == 1) {
    printf("将盘子从 %c 移动到 %c\n", source, dest);
  } else {
    hanoi(n - 1, source, dest, aux);
    printf("将盘子从 %c 移动到 %c\n", source, dest);
    hanoi(n - 1, aux, source, dest);
  }
}

int main() {
  int n;
  printf("请输入盘子的数量:");
  scanf("%d", &n);

  hanoi(n, 'A', 'B', 'C');

  return 0;
}

青蛙跳台阶:(循环)

青蛙跳台阶问题是一个典型的动态规划问题。假设青蛙跳上 n 级台阶,这个问题可以拆解为两个子问题:跳到 n-1 级台阶和跳到 n-2 级台阶。

当青蛙在 n-1 级台阶上时,它只需再跳上 1 级台阶即可到达第 n 级台阶;
当青蛙在 n-2 级台阶上时,它只需再跳上 2 级台阶即可到达第 n 级台阶。

因此,青蛙跳上 n 级台阶的跳法数量是跳上 n-1 级台阶的跳法数量加上跳上 n-2 级台阶的跳法数量。

根据以上分析,我们可以得到递推式:
f(n) = f(n-1) + f(n-2)

初始情况:

  • 当 n=1 时,青蛙只有一种跳法,即直接跳上第一级台阶。
  • 当 n=2 时,青蛙有两种跳法,可以一次跳两级台阶,也可以分两次跳每次跳一级台阶。
#include <stdio.h>

int jumpSteps(int n){
  if (n <= 0) {
    return 0;
  } else if (n == 1) {
    return 1;
  } else if (n == 2) {
    return 2;
  }

  int a = 1;  // 第 n-2 级台阶的跳法数量
  int b = 2;  // 第 n-1 级台阶的跳法数量
  int result = 0;

  for (int i = 3; i <= n; i++) {
    result = a + b;
    a = b;
    b = result;
  }

  return result;
}

int main() {
  int num;
  printf("请输入台阶的级数:");
  scanf("%d", &num);

  int result = jumpSteps(num);
  printf("青蛙跳上 %d 级台阶的跳法数量为:%d\n", num, result);

  return 0;
}

标签:char,台阶,函数,int,hanoi,C语言,---,printf,盘子
From: https://blog.51cto.com/u_16251486/7588602

相关文章

  • Llama2-Chinese项目:2.3-预训练使用QA还是Text数据集?
      Llama2-Chinese项目给出pretrain的data为QA数据格式,可能会有疑问pretrain不应该是Text数据格式吗?而在Chinese-LLaMA-Alpaca-2和open-llama2预训练使用的LoRA技术,给出pretrain的data为Text数据格式。所以推测应该pretrain时QA和Text数据格式都应该支持。然后马上就会有一个疑问......
  • 支付---支付通道
    这个月换了工作,开始做支付相关的业务了,那一贯秉持“从实践中学习”的我,自然后面也会更新以支付为主题的博客内容。这是第一篇,主要以“支付通道”这个基础并且重要的名词开始,那一起开启一段新的旅程吧。//TODO......
  • 无涯教程-JavaScript - RANK.AVG函数
    描述RANK.AVG函数在提供的值数组中返回给定值的统计等级。如果列表中有重复值,则返回平均排名。语法RANK.AVG(number,ref,[order])争论Argument描述Required/OptionalNumberThenumberwhoserankyouwanttofind.RequiredRefAnarrayof,orareferenceto,a......
  • 力扣-替换空格
    1.问题请实现一个函数,把字符串s中的每个空格替换成"%20"。示例1:输入:s="Wearehappy."输出:"We%20are%20happy."2.说明输入说明:输入一个字符串s输出说明:输出替换空格后的字符串3.范例输入范例:weareh输出范例:we%20are%20h4.思路使用双指针方法,对字符串数组进......
  • JavaScript函数的使用
    有关函数概念:匿名函数指的是没有函数名称的函数。作用:可以有效的避免全局变量的污染以及函数名的冲突问题。说明:既是函数表达式的另一种表示形式,又可通过函数声明的方式实现调用。函数语法varfun4=function(){console.log("我是匿名函数中封装的一段代码");......
  • 多线程实现实例-简单的聊天小程序TCP编程尝试
    运用TCP编程,实现一个从客户端到服务端多线程聊天的功能。 获取信息线程的代码Get.javapackagecom.xyq.HW;importjava.io.BufferedReader;importjava.io.InputStream;importjava.io.InputStreamReader;importjava.net.Socket;publicclassGetextendsThread{......
  • Some Recent Thoughts Wrritten By NiuJiawen-2019141490165
    Recently,manystudentswhoarejunioryeararetakingpartininterviewsforexemptstudents.Somehaveobtainedsatisfactoryoffers,whereas,othersthinkitistoohardtogetawonderfuloffer. Andthereisnodoubtthatthelatterwillbefrustrated......
  • C语言标准库
    https://www.gnu.org/software/libc/manual/pdf/libc.pdfhttps://cplusplus.com/reference/clibrary/NOTICE不能在头文件中定义全局变量,否则该变量会存在于任何#include<ThisHeader_H>的地方。要学会防御式编程,即要保证头文件的幂等性#ifndef_STDIO_H #define_STDIO......
  • LangChain使用fine-tuned GPT-3.5
    LangChain使用fine-tunedGPT-3.5参考:https://openai.com/blog/gpt-3-5-turbo-fine-tuning-and-api-updateshttps://platform.openai.com/docs/guides/fine-tuninghttps://qiita.com/MandoNarin/items/6fadb78f357c66e25502事前准备!pipinstallopenai!pipinstalltiktok......
  • tesseract-ocr下载安装与配置
    tesseract-ocr下载安装与配置 1:下载地址:https://digi.bib.uni-mannheim.de/tesseract/......