CodeLibrary/03_Clion_Cplus_assignment_20240421/main.cpp
JRNitre 80ced4e4a4 20240421
03_Clion_Cplus_assignment_20240421
算法分析与程序设计 实验报告二
2024-04-21 11:11:36 +08:00

116 lines
3.1 KiB
C++
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
* Code: 算法分析与程序设计 实验报告二
* Date: 2024-04-21
* Design by JRNitre
*
* Function:
* * 构造函数
* * 析构函数
* */
#include <iostream>
using namespace std;
/*
* [题干]
* 猴子第一天摘下若干个桃子当即吃了2/3还不过瘾又多吃了一个第二天早上又将剩下的桃子吃掉2/3又多吃了一个。以后每天早上都吃了前一天剩下的2/3再多吃一个。到第n天早上想再吃时发现只剩下k个桃子了。求第一天共摘了多少桃子。用递推法、递归法两种方法实现。
* Input
* 首先输入一个正整数T表示测试数据的组数然后是T组测试数据。每组数据输入两个正整数nk1≤nk≤15
* Output
* 对于每组测试数据,在一行上输出第一天共摘了多少个桃子。
*/
int function_01 (int t, int n, int k){
int i,j;
for (i = 0; i < t; i++){
int peaches[n+1];
peaches[n] = k;
for (j = n; j > 1; j--){
peaches[j-1] = (peaches[j] + 1) * 3 / 2;
}
return peaches[1];
}
}
// 分别从键盘输入数据x和y计算x的y次幂并输出。
int function_02 (int x, int y){
if (y == 1){
return x;
}
if (y >= 2){
int result = 1;
for (int i = 0; i < y; i++){
result *= x;
}
return result;
}
}
/*
* [题干]
* 若一头小母牛从第4个年头开始每年生育一头母牛按照此规律第n年时有多少头母牛要求编写两个函数分别以递推、递归的方法进行求解。
* Input
* 测试数据有多组处理到文件尾。每组测试输入一个正整数n1≤n≤40
* Output
* 对于每组测试输出第n年时的母牛总数。
* Sample Input
* 15
* Sample Output
* 129
*/
int function_03_recursion(int n) {
int dp[n+1];
dp[1] = 1;
dp[2] = 2;
dp[3] = 3;
for (int i = 4; i <= n; i++) {
dp[i] = dp[i-1] + dp[i-3];
}
return dp[n] / 2;
}
int function_03_recursion2(int n){
if (n == 1 || n == 2 || n == 3) {
return n;
}
return function_03_recursion2(n-1) + function_03_recursion2(n-3);
}
/*
* [题干]
* 欧洲数学家伯努利收到一位朋友的来信,打开一看信不是写给他的,但是信封上的地址、姓名都没有问题。
* 五封信装入写有不同地址和姓名的五个信封,全部装错的可能性有多少种?
* 请根据递推关系式,用递归法求解。
*/
int function_04(int n) {
if (n == 1) {
return 0;
} else if (n == 2) {
return 1;
} else {
return (n - 1) * (function_04(n - 1) + function_04(n - 2));
}
}
/*
* [题干]
* 万花筒的初始形状如下图所示,其中的圆圈代表万花筒的闪烁点。
* 每旋转一次万花筒形状就演变一次,演变的规则是在末端再生出同样的形状。
* 求第 n 次旋转后有多少个闪烁点?
* */
int function_05 (int n){
if (n == 1){
return 0;
}
if (n == 2){
return 1;
}
if (n > 2){
return (n - 1) * (function_05(n - 1) + function_05(n - 2));
}
}
int main() {
return 0;
}