poj 2081

本文介绍了一个使用C++实现的数列生成算法,通过控制台输入一个整数n,程序将输出预先计算好的数列中第n项的值。该算法首先初始化一个布尔数组用于标记数列中已经出现过的值,并创建另一个数组来存储数列本身。程序通过迭代的方式填充数列,对于每个位置i,如果前一项减去i的结果没有出现过且为正,则当前项就等于这个差值;否则当前项就等于前一项加上i。最后,程序通过循环读取用户的输入并输出相应的数列值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include<cstdio>
#include<cstring>
bool vis[10000000];
int  a[500050];
void init()
{
	memset(vis,0,sizeof(vis));
	a[0]=0;
	for(int i=1;i<=500000;i++)
	{
		if(!vis[a[i-1]-i]&&a[i-1]-i>0)
		a[i]=a[i-1]-i;
		else
		a[i]=a[i-1]+i;
		vis[a[i]]=1;
	}
}
int main()
{
	int x;
	init();
	while(~scanf("%d",&x)&&(x!=-1))
	printf("%d\n",a[x]);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值