青牛将隐
题目背景
有一即有二,有三即有四。
一二三四五,有亦何妨事。
题目描述
输出一个数列,穿插排列,最大数字为n。
具体穿插方式为:开始数列中只有一个数字1,然后每次在数字i两边空隙中增加数字i+1。
你可以参照样例来理解题意。
格式
输入格式
一行一个整数n。
输出格式
一行若干个数字表示答案。
样例
输入样例1
3
Copy
输出样例1
3 2 3 1 3 2 3
Copy
数据范围
50% 1 \leq n \leq 81≤n≤8
100% 1 \leq n \leq 171≤n≤17
时空限制
时间:1s
空间:128MB
样例解释
数列构造过程如下:1
2 1 2
3 2 3 1 3 2 3
#include<stdio.h>
#include<stdlib.h>
int f(int n)
{
int answer=1,i;
for(i=1;i<=n;i++)
answer*=2;
return answer;
}
int main()
{
int *p=NULL,n,*q=NULL,number,i;
scanf("%d",&n);
p=(int*)calloc(f(n),sizeof(int));
q=(int*)calloc(f(n-1)+1,sizeof(int));
for(i=1;i<=f(n-1);i++)
q[i]=2*i-1;
for(number=1;number<=n;number++)//1->n:number
{
for(i=1;i<=f(number-1);i++)
p[q[i]*f(n-number)]=number;//index
}
for(i=1;i<f(n);i++)
printf("%d ",p[i]);
free(p);
free(q);
return 0;
}