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 <stdio.h>
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 <stdio.h>
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<cc.length;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 <stdio.h>
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的可能路线数。 其中,蜂房的结构如下所示。
输入
- 多组数据输入,每组数据包含两个正整数a, b,且 a<b。
输出
- 蜜蜂从蜂房a爬到蜂房b的可能路线数。
样例输入 Copy
1 2
3 4
样例输出 Copy
1
1
C语言代码:
#include <stdio.h>
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种骨牌铺放方案如下图所示:
输入
- 多组测试用例,每一组是一个正整数。
输出
- 每组输出占一行。 只需要输出铺放方案总数,不需要输出具体的铺放方案。
样例输入 Copy
3
样例输出 Copy
3
C语言代码:
#include <stdio.h>
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);
}
【这个和上面那个性质上是一样的,别问为什么,问就是来连递归表达式都一样的啊,不过也是推导出来的哦,但是老师上课也讲解了,规律还是那个,没错,就是 斐波那契数列哈哈哈哈哈哈】
干到了一点多才睡觉,完犊子了。。。
”橘子不是唯一的水果“
”但橙子是。“
——《如此可爱的我们》