//
一次ac 算法很简单,题目已经给出,b[]是作为标记已有数用的,这样不用去搜,以空间换取时间
// zoj 2421
#include < stdio.h >
#include < stdlib.h >
#include < string .h >
#define MAX 500000
#define MAXA 5000000
int a[MAX],b[MAXA];
int main()
... {
int i;
a[0] = 0;
memset(b,0,MAXA);
for(i = 1; i < MAX; i ++ )
...{
a[i] = a[i - 1] - i;
if(a[i] <= 0 || b[a[i]])
...{
a[i] = a[i - 1] + i;
}
b[a[i]] = 1;
}
int n;
while(scanf("%d", &n),n!= -1)
...{
printf("%d ",a[n]);
}
system("pause");
return 0;
}
// zoj 2421
#include < stdio.h >
#include < stdlib.h >
#include < string .h >
#define MAX 500000
#define MAXA 5000000
int a[MAX],b[MAXA];
int main()
... {
int i;
a[0] = 0;
memset(b,0,MAXA);
for(i = 1; i < MAX; i ++ )
...{
a[i] = a[i - 1] - i;
if(a[i] <= 0 || b[a[i]])
...{
a[i] = a[i - 1] + i;
}
b[a[i]] = 1;
}
int n;
while(scanf("%d", &n),n!= -1)
...{
printf("%d ",a[n]);
}
system("pause");
return 0;
}