7-1 递归实现逆序输出整数 (40 分)
本题目要求读入1个正整数n,然后编写递归函数reverse(int n)实现将该正整数逆序输出。
输入格式:
输入在一行中给出1个正整数n。
输出格式:
对每一组输入,在一行中输出n的逆序数。
输入样例:
12345
输出样例:
54321
#include "iostream"
using namespace std;
void reverse(int n){
int m;
while(n!=0){
m=n%10;
n=n/10;
cout << m;
}
}
int main(){
int n;
cin >> n;
reverse(n);
return 0;
}
import java.util.Scanner;
public class Main {
static void reverse(int n){
int m;
while(n!=0){
m=n%10;
n=n/10;
System.out.print(m);
}
}
public static void main(String[] args) {
int n;
Scanner scanner = new Scanner(System.in);
n = scanner.nextInt();
reverse(n);
}
}
7-2 斐波那契数列(I) (40 分)
已知斐波那契数列 F n = F n − 1 + F n − 2 ( n > = 3 ) , F 1 = 1 , F 2 = 1 F_n=F_{n−1}+F_{n−2}(n>=3),F_1=1,F_2=1 Fn=Fn−1+Fn−2(n>=3),F1=1,F2=1 用递归的方法求解该数列的第n项。输入格式:
输入一个正整数n (1<=n<=40)。
输出格式:
输出一个数,数列的第n项
输入样例1:
1
输出样例1:
1
输入样例2:
3
输出样例2:
2
#include <stdio.h>
int fbnq(int N);//声明部分
int main()
{
int n;
scanf("%d",&n);
if(n>=1 && n<=40)//条件
{
printf("%d",fbnq(n));//输出
}
}
int fbnq(int N)//定义部分
{
int a=1,b=1,sum=0;//a即为f(x-2) b即为f(x-1) sum即为当前项
if(N==1 || N==2)//对于x<3时的说明
{
return 1;
}
else//对于x>=3时的声明
{
int i=3;//此时计数器从第三项开始
for( ;i<=N;i++)//简单的计算方法
{
sum=a+b;
a=b;
b=sum;
}
return sum;//返回值
}
}
#include "iostream"
using namespace std;
int fbnq(int N);//声明部分
int main()
{
int n;
cin >> n;
if(n>=1 && n<=40)//条件
{
cout << fbnq(n);//输出
}
}
int fbnq(int N)//定义部分
{
int a=1,b=1,sum=0;//a即为f(x-2) b即为f(x-1) sum即为当前项
if(N==1 || N==2)//对于x<3时的说明
{
return 1;
}
else//对于x>=3时的声明
{
int i=3;//此时计数器从第三项开始
for( ;i<=N;i++)//简单的计算方法
{
sum=a+b;
a=b;
b=sum;
}
return sum;//返回值
}
}
Java方法1:
import java.util.Scanner;
public class Main{
static int fbnq(int N){
int a=1,b=1,sum=0;//a即为f(x-2) b即为f(x-1) sum即为当前项
if(N==1 || N==2)//对于x<3时的说明
{
return 1;
}
else//对于x>=3时的声明
{
int i=3;//此时计数器从第三项开始
for( ;i<=N;i++)//简单的计算方法
{
sum=a+b;
a=b;
b=sum;
}
return sum;//返回值
}
}
public static void main(String[]args){
int n;
Scanner scanner = new Scanner(System.in);
n = scanner.nextInt();
if(n >= 1 || n <=40){
System.out.print(fbnq(n));
}
}
}
Java方法2:
import java.util.Scanner;
public class Main{
static int fbnq(int n){
if(n==0)
return 0;
if(n==1)
return 1;
return fbnq(n-1) + fbnq(n-2);
}
public static void main(String[]args){
int n;
Scanner scanner = new Scanner(System.in);
n = scanner.nextInt();
if(n >= 1 || n <=40){
System.out.print(fbnq(n));
}
}
}
7-3 汉诺(Hanoi)塔问题 (20 分)
古代某寺庙中有一个梵塔,塔内有3个座A、B和C,座A上放着64个大小不等的盘,其中大盘在下,小盘在上。有一个和尚想把这64 个盘从座A搬到座B,但一次只能搬一个盘,搬动的盘只允许放在其他两个座上,且大盘不能压在小盘上。现要求用程序模拟该过程,输入一个正整数n,代表盘子的个数,编写函数
void hanoi(int n,char a,char b,char c)
其中,n为盘子个数,从a座到b座,c座作为中间过渡,该函数的功能是输出搬盘子的路径。
输入格式:
输入在一行中给出1个正整数n。
输出格式:
输出搬动盘子路径。
输入样例:
3
输出样例:
a-->b
a-->c
b-->c
a-->b
c-->a
c-->b
a-->b
#include<stdio.h>
#include<stdlib.h>
void hanio(int n,char a,char b,char c);
int main()
{
int n=0;
scanf("%d",&n);
hanio(n,'a','b','c');
return 0;
}
void hanio(int n,char a,char b,char c)
{
if(n==1)
printf("%c-->%c\n",a,b);
else{
hanio(n-1,a,c,b);
printf("%c-->%c\n",a,b);
hanio(n-1,c,b,a);
}
}
#include "iostream"
using namespace std;
void hanio(int n,char a,char b,char c);
int main()
{
int n=0;
cin >> n;
hanio(n,'a','b','c');
return 0;
}
void hanio(int n,char a,char b,char c)
{
if(n==1)
cout << a << "-->" << b <<endl;
else{
hanio(n-1,a,c,b);
cout << a << "-->" << b <<endl;
hanio(n-1,c,b,a);
}
}