0
点赞
收藏
分享

微信扫一扫

【opencv】示例-npr_demo.cpp 非真实感渲染:边缘保留平滑、细节增强、铅笔素描/彩色铅笔绘图和风格化处理...

诗远 2024-04-14 阅读 4

文章目录

一、意义

1. 举例

2. 意义

二、队尾身高

1. 审题

题目描述

输入描述

输出描述

样例1

提示

2. 思路

3. 参考答案

#include <iostream>
using namespace std;

int n;

double h(int n)
{
	if (n == 1) return 200;
	return h(n-1) * 0.9;
}

int main()
{
	cin >> n;
	if (n == 0)
	{
		cout << "Error: It is not possible to have 0 people.";
		return 0;
	}
	cout << h(n);
	return 0;
}

三、斐波那契数列

1. 思路

2. 参考答案

#include <iostream>
using namespace std;

int n;

long long f(int n)
{
	if (n <= 2) return 1;
	return f(n-1) + f(n-2);
}

int main()
{
	cin >> n;
	if (n == 0)
	{
		cout << "impossible index.";
	}
	cout << f(n);
	return 0;
}

四、楼梯走法

1. 审题

题目描述

输入描述

输出描述

样例1

样例2

样例3

提示

2. 思路

3. 参考答案

3.1 递归

#include <iostream>
using namespace std;

int n;

long long f(int n)
{
	if (n == 1) return 1;
	if (n == 2) return 2;
	if (n == 3) return 4;
	return f(n-1) + f(n-2) + f(n-3);
}

int main()
{
	cin >> n;
	cout << f(n);
	return 0;
}

3.2 记忆化搜索

#include <iostream>
using namespace std;

int n;
int a[40] = {0, 1, 2, 4};

long long f(int n)
{
	if (a[n] != 0) return a[n];
	if (n == 1) return 1;
	if (n == 2) return 2;
	if (n == 3) return 4;
	return a[n] = f(n-1) + f(n-2) + f(n-3);
}

int main()
{
	cin >> n;
	cout << f(n);
	return 0;
}

四、辗转相除

1. 审题

2. 参考答案

#include <iostream>
using namespace std;

long long a, b;
int gcd(int x, int y)
{
    if (x % y == 0) return y;
    return gcd(y, x % y);
}

int main()
{
    cin >> a >> b;
    int gcdAns = gcd(a, b);
    long long lcmAns = a * b / gcdAns;
    // cout << lcmAns;
    // cout << gcdAns;
    return 0;
}

五、角谷猜想/克拉兹猜想/冰雹猜想步数

1. n 到 1 经过的次数

#include <iostream>
using namespace std;

int n;

int f(int n)
{
	if (n == 1) return 0;
	if (n % 2 == 0) return f(n/2) + 1;
	else return f(n*3+1) + 1;
}

int main()
{
	cin >> n;
	cout << f(n);
	return 0;
}

2. 找 n 的下一个数

#include <iostream>
using namespace std;

int n;
int cnt;

void f(int n)
{
	if (n == 1) return;
	cnt++;
	if (n % 2 == 0) f(n/2);
	else f(n*3+1);
}

int main()
{
	cin >> n;
	f(n);
	cout << cnt;
	return 0;
}

3. 累加次数

#include <iostream>
using namespace std;

int f(int n, int cnt)
{
	if (n == 1) return cnt;
	if (n % 2 == 0) return f(n/2, cnt+1);
	else return f(n*3+1, cnt+1);
}

int main()
{
	int n;
	int cnt = 0;
	cin >> n;
	cnt = f(n, 0);
	cout << cnt;
	return 0;
}

六、[NOIP2001 普及组] 数的计算

1. 审题

题目描述

输入格式

输出格式

样例 #1

提示

2. 参考答案

2.1 简单递归

#include <iostream>
using namespace std;

int n;
int cnt;

void f(int x)
{
	if (x == 1) return; // 一个分叉的边界
	for (int i = 1; i <= x/2; i++)
	{
		cnt++; // 记录调用了几次f()函数
		f(i);
	}
}

int main()
{
	cin >> n;
	f(n);
	cout << cnt+1;
	return 0;
}
举报
0 条评论