STL和递归思想来写这道题
查看原帖
STL和递归思想来写这道题
1483147
SukeAmazingHouse楼主2024/12/4 20:27
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
vector<ll>vec;//存入数值,然后排序打印输出
void ice_guess(ll n)
{
	vec.push_back(n);
	if(n==1) return;
	if(n%2==0) ice_guess(n/2);
	if(n%2==1) ice_guess(n*3+1);
}
int main()
{
	int n;
	cin>>n;
	ice_guess(n);
	
	for(int i = vec.size()-1;i>=0;i--)
	{
		cout<<vec[i]<<" ";
	}
	return 0;

}

通过题目,我们可以发现其实这就是一个递归题目,从最大数开始递归,直到通过奇数计算、偶数计算最后得到数字1。 那么自然而然通过条件写出递归函数,然后在int main中引用函数。 但我们可以注意,虽然递归返回的值符合题意,但是倒序的(从输入的值开始,而不是从1开始),所以我们可以用vec的反转函数 【

reverse(vec.begin(),vec.end());
for(auto i:vec)
{
  cout<<i<<" ";
}

】, 也可以直接for循环倒序打印输出。

2024/12/4 20:27
加载中...