双周赛week2

请编写程序输出前n个正整数的全排列(n<10),并通过9个测试用例(即n从1到9)观察n逐步增大时程序的运行时间。

输入格式:

输入给出正整数n(<10)。

输出格式:

输出1到n的全排列。每种排列占一行,数字间无空格。排列的输出顺序为字典序,即序列a1​,a2​,⋯,an​排在序列b1​,b2​,⋯,bn​之前,如果存在k使得a1​=b1​,⋯,ak​=bk​ 并且 ak+1​

#include
#include
int a[11],b[11];
int n;
void find(int a[],int b[],int x)
{
    if(x==n+1)
    {
        for(int i=1; i<=n; i++)
            printf("%d",b[i]);
        printf("\n");
    }
    for(int i=1; i<=n; i++)
    {
        if(a[i]==0)
        {
            a[i]=1;
            b[x]=i;
            find(a,b,x+1);
            a[i]=0;
        }
    }
}
int main()
{
    scanf("%d",&n);
    find(a,b,1);
    return 0;
}

Drizzle 前往山地统计大山的数目,现在收到这片区域的地图,地图中用0(平地)1(山峰)绘制而成,请你帮忙计算其中的大山数目
山总是被平地四面包围着,每一座山只能在水平或垂直方向上连接相邻的山峰而形成。一座山峰四面被平地包围,这个山峰也算一个大山
另外,你可以假设地图的四面都被平地包围着。

要求:

输入:第一行输入M,N分别表示地图的行列,接下来M行每行输入N个数字表示地图
输出:输出一个整数表示大山的数

#include
#include
int a[2100][2100];
int n,m;
int maxx;
int doit(int x,int y)
{
    if(x>n||y>m||x<1||y<1||a[x][y]==0)
        return 0;
    a[x][y]=0;
    doit(x+1,y);
    doit(x,y+1);

你可能感兴趣的:(算法,蓝桥杯,c语言)