社区讨论
20分求调
P1010[NOIP 1998 普及组] 幂次方参与者 3已保存回复 9
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 9 条
- 当前快照
- 1 份
- 快照标识符
- @mhk7l8um
- 此快照首次捕获于
- 2025/11/04 14:49 4 个月前
- 此快照最后确认于
- 2025/11/04 14:49 4 个月前
处理不好添加+号,只过了第二个样例,也就是说如果是2的一次方的而且这个数正好在一个括号内的最后一个数的话,就处理不好,会多添加一个加号,比方说
样例:
73输出:
CPP2(2(2)+2+)+2(2+2(0))+2(0)#include <iostream>
#include <string>
#include <vector>
using namespace std;
int n;
vector<string>res;
int check(int tmp)
{
int i;
for(i = 1; ; i ++)
{
if(tmp >> i == 0)break;
}
return i - 1;
}
void dfs(int n)
{
int tmp = n & -n;
if(tmp != 0)
{
//cout << tmp << endl;
dfs(n - tmp);
res.push_back("(");
int t = check(tmp);
if(t > 2)dfs(t);
else res.push_back(to_string(t));
res.push_back(")");
}
}
int main()
{
cin>>n;
dfs(n);
res.push_back("");
//for(int i = 0; i < res.size(); i ++)cout << res[i];
for(int i = 0; i < res.size(); i ++)
{
if(res[i] == "(" && res[i + 1] == "1")
{
cout << 2 << '+';
i += 2;
}
else
{
if(res[i] == "(")cout << 2;
if(res[i] != "1")cout << res[i];
if(res[i] == ")" && res[i + 1] != ")" && res[i + 1] != "")
cout << '+';
}
}
}
回复
共 9 条回复,欢迎继续交流。
正在加载回复...