HDU2062 Subset sequence
C语言版本。
写出n=1到n=3的排列,找规律,总能由一级推二级。
- runtime error (运行时错误)
就是程序运行到一半,程序就崩溃了。
比如说:
①除以零
②数组越界:int a[3]; a[10000000]=10;
③指针越界:int * p; p=(int *)malloc(5 * sizeof(int)); *(p+1000000)=10;
④使用已经释放的空间:int * p; p=(int *)malloc(5 * sizeof(int));free§; *p=10;
⑤数组开得太大,超出了栈的范围,造成栈溢出:int a[100000000];
#include<stdio.h>
int main()
{
int i,a[21],t,n;
long long p[21],m;
p[0]=0;
p[1]=1;
for(i=2;i<=20;i++)
{
p[i]=p[i-1]*(i-1)+1;
}
while(scanf("%d%lld",&n,&m)!=EOF)
{
for(i=0;i<=20;i++)//p[21]
a[i]=i;//方便删数
while(n-- && m)
{
t=m/p[n+1]+(m%(p[n+1])?1:0);//double 类型没法求余。
printf("%d",a[t]);
for(i=t;i<=n;i++)
a[i]=a[i+1];//删数
// printf("i=%d\n",i);
m=m-(t-1)*p[i]-1;//因为顺序排列,确定第一级组,然后减去之前第一级组的内容,剩下的全是第二级组,即新第一级组。-1是判断是不是该行最后一个数。
if(m==0)printf("\n");
else
{
printf(" ");
}
}
}
return 0;
}