模拟法
模拟法(Simulation Method) 是一种朴素的算法思想,也最直观的算法之一,其核心思想是对问题进行描述,按照问题发生的先后、逻辑顺序,对问题的过程进行编码实现,最终解决该问题,简单来说就是,题目怎么说,你就怎么做。
模拟法的特点是直观,通常并不需要特别复杂的算法设计,只要把问题描述清楚,按照问题的逻辑编码实现即可,对于初学者来说非常适合。然而,有的问题本身细节错综复杂,模拟写的过程很容易犯错误,非常考查编程人员的代码能力。
示例:角谷猜想
题目描述
日本一位中学生发现一个奇妙的定理,请角谷教授证明,而教授无能为力,于是产生了角谷猜想。
猜想的内容:任给一个自然数,若为偶数则除以 2 ,若为奇数则乘 3 加 1 ,得到一个新的自然数后按上面的法则继续演算。若干次后得到的结果必为 1 。
请编写代码验证该猜想:求经过多少次运算可得到自然数 1 。
如:输入 22 ,则计算过程为。
22/2=1111*3+1=3434/2=1717*3+1=5252/2=2626/2=1313*3+1=4040/2=2020/2=1010/2=55*3+1=1616/2=88/2=44/2=22/2=1
经过 15 次运算得到自然数 1 。
输入描述
一行,一个正整数 。()
输出描述
一行,一个整数,表示得到 1 所用的运算次数。
输入输出样例
输入数据
22
输出数据
15
代码实现
#include <iostream>using namespace std;
int main() { int n, cnt = 0; cin >> n;
while (n != 1) { if (n % 2 == 0) n = n / 2; else n = n * 3 + 1; cnt++; }
cout << cnt << endl;
return 0;}