c语言 a=a*3=2,2021-3-14开学第二周

本文详细介绍了如何使用递归解决五个不同的编程问题:递归求和(S(n)),倒序输出非负整数,计算字符串中大写字母数量,判断Kimi数列的3的倍数,以及计算蜂房间路径数。通过实例展示了C和Java代码,并揭示了斐波那契数列在部分问题中的应用。
摘要由CSDN通过智能技术生成

### 要求使用递归完成所有习题 ###

* A、递归求和

* B、倒序输出

* C、递归计数

* D、Kimi数列

* E、蜂房

* F、骨牌覆盖

# A、递归求和 #

**题目描述**

* 使用递归编写一个程序,求: S(n)=1-1/2+1/3-1/4+1/5-1/6+…

**输入**

* 多组数据输入,每组输入一个正整数n。

**输出**

* 输出S(n)的计算结果(精确到小数点后六位)。

**样例输入 Copy**

1

**样例输出 Copy**

1.000000

**`java代码:`**

import java.util.Scanner;

public class Main {

public static void main(String[] args) {

Scanner sc = new Scanner(System.in);

Main juele = new Main();

int n;

while(sc.hasNext()){

n = sc.nextInt();

java.text.DecimalFormat leile = new java.text.DecimalFormat("0.000000");

System.out.println(leile.format(juele.cbb(n)));

}

}

public double cbb(int n){

if (n==0) return 0;

if (n==1) return 1;

if (n%2==0){

return cbb(n-1)-(double)1/n;

}else

return cbb(n-1)+(double)1/n ;

}

}

**`C语言代码:`**

#include

double cbb();

int main()

{

int n;

while(scanf("%d",&n)!=EOF){

printf("%lf\n",(double)cbb(n));

}

return 0;

}

double cbb(int n){

if(n==0)

return 0;

if(n==1)

return 1;

if(n%2==0)

return cbb(n-1)-(double)1/n;

else

return cbb(n-1)+(double)1/n;

}

> 【这题其实不是很难,但是不知道为什么,我的另一个思路实现不了,可能就是技术不行吧!o(╥﹏╥)o

> 我从周五早上开始搞这个题,来CSDN看人家的代码一遍一遍的改,改到了周六晚上,才做出来,最大的错误就是C语言代码里递归函数没有声明,(╯▔皿▔)╯】

# B、倒序输出 #

**题目描述**

* 使用递归编写一个程序,逆序输出一个非负整数。例如输入1234,输出4321(不含前导0)。

**输入**

* 多组输入,每组输入一个非负整数。

**输出**

* 逆序输出结果,每个结果占一行。

**样例输入 Copy**

12

1230

0

**样例输出 Copy**

21

321

0

**`C语言代码:`**

#include

int cbb();

int main()

{

int n;

while(scanf("%d",&n)!=EOF){

printf("%d\n",cbb(n));

}

}

int cbb(int n){

int bb = 0;

while(n>0){

bb = bb*10+n%10;

n = n/10;

}

return bb;

}

> 【这个题并没有改Java代码了 ,凑合着这样吧,泪流满面】

# C、递归计数 #

**题目描述**

* 编写一个递归程序,返回一个字符串中大写字母的数目。例如,输入“AbcD”,输出2。

**输入**

* 多组输入,每组包括一个仅由大小写字母组成的字符串。

**输出**

* 输出字符串中出现大写字母的数目。

**样例输入 Copy**

AbcD

**`样例输出 Copy`**

2

**`Java代码:`**

import java.util.Scanner;

public class Main {

public static void main(String[] args) {

// TODO Auto-generated method stub

Scanner sc = new Scanner(System.in);

Main lanle = new Main();

while(sc.hasNext()){

String bb = sc.next();

char cc[] = bb.toCharArray();

System.out.println(lanle.cbb(cc));

}

}

public int cbb(char []cc){

int cb = 0;

for(int i=0;i

if(cc[i]>='A'&&cc[i]<='Z')

cb++;

}

return cb;

}

}

> 【说真的,我写Java完全是因为C语言学得时间太长了,不记得怎么获取字符串的单个字符了,而且CSDN的小伙伴们写的我有带你不太明白,好吧,我承认,我是个学渣,

> /(ㄒoㄒ)/~~】

# D、Kimi数列 #

**题目描述**

* Kimi最近在研究一个数列:

* F(0) = 7

* F(1) = 11

* F(n) = F(n-1) + F(n-2) (n≥2)

* Kimi称之为Kimi数列。请你帮忙确认一下数列中第n个数是否是3的倍数。

**输入**

* 输入包含多组数据。

* 每组数据包含一个整数n,(0≤n≤30)。

**输出**

* 对应每一组输入有一行输出。

* 如果F(n)是3的倍数,则输出“Yes”;否则输出“No”。

**样例输入 Copy**

0

1

2

3

4

5

**样例输出 Copy**

No

No

Yes

No

No

No

**C语言代码:**

#include

int cbb();

int main()

{

int n;

while(scanf("%d",&n)!=EOF){

if(0<=n&&n<=30){

if(cbb(n)%3==0){

printf("Yes\n");

}

else

printf("No\n");

}

}

}

int cbb(int n){

if(n==0)

return 7;

if(n==1)

return 11;

if(n>=2)

return cbb(n-1)+cbb(n-2);

}

> 【这个代码绝对是我自己写的,C语言当时正打开着,于是乎,写了C语言的,这个题目其实很好写,递归表达式都给你了,真的很方便了】

# E、蜂房 #

**题目描述**

* 有一只经过训练的蜜蜂只能爬向右侧相邻的蜂房,不能反向爬行。请编程计算蜜蜂从蜂房a爬到蜂房b的可能路线数。 其中,蜂房的结构如下所示。

![在这里插入图片描述][20210314220441390.png]

**输入**

* 多组数据输入,每组数据包含两个正整数a, b,且 a

**输出**

* 蜜蜂从蜂房a爬到蜂房b的可能路线数。

**样例输入 Copy**

1 2

3 4

**样例输出 Copy**

1

1

**`C语言代码:`**

#include

int cbb();

int main()

{

int a,b;

while(scanf("%d %d",&a,&b)!=EOF){

printf("%d\n",cbb(a,b));

}

}

int cbb(int a,int b){

if((b-a)==1)

return 1;

if((b-a)==2)

return 2;

if((b-a)>2)

return cbb(a,b-1)+cbb(a,b-2);

}

> 【这个题目老师上课的时候讲过,发现其中规律,其实和斐波那契数列是一样的,那么从a到b的路径可以转换的哦,偷偷说一句,这个题我也是参考了别的小伙伴们的,我道歉,我错了,我真的下次不会我会回来的】

# F、骨牌覆盖 #

**题目描述**

* 用大小为1×2的骨牌铺满一个大小为2×n的长方形方格,编写一个程序,输入n,输出铺放方案总数。例如,输入n=3,即大小为2×3的方格,输出3。3种骨牌铺放方案如下图所示:

![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ1ODIzMTE4_size_16_color_FFFFFF_t_70]

**输入**

* 多组测试用例,每一组是一个正整数。

**输出**

* 每组输出占一行。 只需要输出铺放方案总数,不需要输出具体的铺放方案。

**样例输入 Copy**

3

**样例输出 Copy**

3

**`C语言代码:`**

#include

int cbb();

int main()

{

int n;

while(scanf("%d",&n)!=EOF){

printf("%d\n",cbb(n));

}

}

int cbb(int n){

if(n==1)

return 1;

if(n==2)

return 2;

if(n>2)

return cbb(n-1)+cbb(n-2);

}

> 【这个和上面那个性质上是一样的,别问为什么,问就是来连递归表达式都一样的啊,不过也是推导出来的哦,但是老师上课也讲解了,规律还是那个,没错,就是 斐波那契数列哈哈哈哈哈哈】

> 干到了一点多才睡觉,完犊子了。。。

> ”橘子不是唯一的水果“

> ”但橙子是。“

> ——《如此可爱的我们》

[20210314220441390.png]: /images/20210516/06fa2e2459e04d1d8867016d2cee1130.png

[watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ1ODIzMTE4_size_16_color_FFFFFF_t_70]: /images/20210516/08169fcd32804782b468745889850e21.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值