不会做,求指点

以下是给这个分组的一个模板发帖:
这是xx比赛的第x题
题目描述:
输入一个 n 。请你按照以下规则输出序列:

设输出这一序列的过程为 F(n)

如果 n 是 1 ,那么输出 1 并返回。

否则,先执行 F([n/2]) ,再输出 n,再执行 F(n-[n/2])

这里中括号的意思是下取整

#include<bits/stdc++.h>
using namespace std;
long long f(long long x)
{
	if(x == 1)
	{
		cout << 1;
		return 1;
	}
	else
	{
		return f(floor(x / 2));
		cout << x << " ";
		return f(x-floor(x / 2));
	}
}
int main()
{
	int n;
	cin >> n;
	f(n);
	return 0;
}

把2个return去掉

1 个赞
#include<bits/stdc++.h>
using namespace std;
long long f(long long x)
{
	if(x == 1)
	{
		cout << 1;
		return 1;
	}
	else
	{
		f(x / 2);
		cout << x << " ";
		f(x-x / 2);
	}
}
int main()
{
	int n;
	cin >> n;
	f(n);
	return 0;
}
2 个赞

long long除法就是向下取整floor也可以去掉

1 个赞

long long的f也可以改成void,然后cout<<1要加空格

1 个赞