AT_codefestival_2016_final_b
根据题意,很容易得知要使得它们的最大值最小,就要从最小的 \(1\) 开始用。转化一下题意,不难发现,我们只需求出最小的 \(k\),使得
\[\ \sum_{i=1}^k i\ \ge n
\]
于是思路便产生了:对 \(1\),\(2\),\(3\),⋯\(k\) 求和,直到上述式子成立。可以很容易地看出来一个规律:
\[( \ \sum_{i=1}^k i\ ) - n<k+1
\]
根据这个规律,我们知道多出来的那一部分就存在于 \(1-k\) 当中,所以输出时判断是否为多出来的那个数就可以了。
代码如下:
#include <iostream>
#include <cstdio>
using namespace std;
int main()
{
int n,t=0,k=0;
cin>>n;
for(int i=1;k<n;i++)
t++,k+=i;
k=k-n;
for(int i=1;i<=t;i++)
if(i!=k)
cout<<i<<endl;
return 0;
}
还是菜。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统