洛谷入门4-数组

一、校门外的树

 

 解题:

 

# include<iostream>

using namespace std;

int main()
{
    int l,m;
    int start,end;//区间的开始和阶数
    cin>>l>>m;
    int b[l+1]={0};//标记数目
    int sum=0;//还剩几棵树
    for(int i=0;i<m;i++)
    {
        cin>>start>>end;
        //一个区间中,被访问过,标记为1
        for(int j=start;j<=end;j++)
        {
            if(b[j]==0)
            {
                b[j]=1;
            }
        }
    }
    //最后计算没有被标记过的树
    for(int i=0;i<=l;i++)
    {
        if(b[i]==0)
        sum++;
    }
    cout<<sum;
    return 0;
}

 

二、工艺品制作

 

 解题:

# include<iostream>

using namespace std;

int main()
{
    int w,x,h;
    cin>>w>>x>>h;
    int q;
    cin>>q;
    //将立方体标记为0,遇到在切除范围内的就标记为1
    int s[30][30][30]={0};
    int x1,y1,z1,x2,y2,z2;
    int cnt=0;//剩余立方体的个数
    for(int m=0;m<q;m++)
    {
        cin>>x1>>y1>>z1>>x2>>y2>>z2;
        //切除范围内的立方体标记1
        for(int i=x1;i<=x2;i++)
            for(int j=y1;j<=y2;j++)
                for(int k=z1;k<=z2;k++)
                {
                    if(s[i][j][k]==0)
                        s[i][j][k]=1;
                }
    }
    //计算标记为0的立方体
    for(int i=1;i<=w;i++)
        for(int j=1;j<=x;j++)
            for(int k=1;k<=h;k++)
            {
                if(s[i][j][k]==0)
                cnt++;
            }
    cout<<cnt;
    return 0;
}

 

三、彩票摇奖

 

 解题:

(桶排序)

 

# include<iostream>

using namespace std;
//将中奖的数字标为1(桶排序),方便比较买的彩票数字

int main()
{
    //初始化数组要清零!!
    int n,b[34]={0},t;//买彩票的张数,放中奖的数字,中奖的数字
    int cnt,d[7]={0};//每张彩票中奖数字的个数,中奖的等级
    cin>>n;
    for(int i=1;i<=7;i++)
    {
        cin>>t;
        b[t]=1;
    }
    for(int i=1;i<=n;i++)
    {
        cnt=0;//每张彩票中奖数字清零
        for(int j=1;j<=7;j++)
        {
            cin>>t;
            if(b[t]==1)
                cnt++;
        }
        d[7-cnt]++;
    }
    for(int i=0;i<=6;i++)
    cout<<d[i]<<" ";
    return 0;
}

 

四、神奇的幻方

 

 解题:

 

# include<iostream>

using namespace std;

int n,a[100][100]={0};//幻方的阶数,二维数组构建幻方
int x,y;//点的坐标
int main()
{
    cin>>n;
    a[1][n/2+1]=1;
    //初始的坐标
    x=1;
    y=n/2+1;
    for(int k=2;k<=n*n;k++)
    {
        if(x==1&&y!=n)
        {
            x=n;
            y++;
        }
        else if(x!=1&&y==n)
        {
            y=1;
            x--;
        }
        else if(x==1&&y==n)
        {
            x++;
        }
        else if(x!=1&&y!=n)
        {
            if(a[x-1][y+1]==0)
            {
                x--;
                y++;
            }
            else
            {
                x++;
            }
        }
        a[x][y]=k;
    }
    for(int i=1;i<=n;i++)
    {   
        for(int j=1;j<=n;j++)
        {
            cout<<a[i][j]<<" ";
        }
        cout<<endl;
    }
    return 0;
}

 

五、显示屏

 

 

 解题:

# include<iostream>

using namespace std;

//列出第几个数字的第几行第几列
char c[10][5][3]=
{
    {//0
        'X','X','X',
        'X','.','X',
        'X','.','X',
        'X','.','X',
        'X','X','X',
    },
    {//1
        '.','.','X',
        '.','.','X',
        '.','.','X',
        '.','.','X',
        '.','.','X',
    },
    {//2
        'X','X','X',
        '.','.','X',
        'X','X','X',
        'X','.','.',
        'X','X','X',
    },
    {//3
        'X','X','X',
        '.','.','X',
        'X','X','X',
        '.','.','X',
        'X','X','X',
    },
    {//4
        'X','.','X',
        'X','.','X',
        'X','X','X',
        '.','.','X',
        '.','.','X',
    },
    {//5
        'X','X','X',
        'X','.','.',
        'X','X','X',
        '.','.','X',
        'X','X','X',
    },
    {//6
        'X','X','X',
        'X','.','.',
        'X','X','X',
        'X','.','X',
        'X','X','X',
    },
    {//7
        'X','X','X',
        '.','.','X',
        '.','.','X',
        '.','.','X',
        '.','.','X',
    },
    {//8
        'X','X','X',
        'X','.','X',
        'X','X','X',
        'X','.','X',
        'X','X','X',
    },
    {//9
        'X','X','X',
        'X','.','X',
        'X','X','X',
        '.','.','X',
        'X','X','X',
    }
};

int n;//数字位数
char s[1000];//一串数字
int main()
{
    cin>>n;
    cin>>s;
    for(int i=0;i<5;i++)//枚举每一行
    {
        for(int j=0;j<n;j++)//枚举每个数字
        {
            for(int k=0;k<3;k++)
            cout<<c[s[j]-'0'][i][k];
            if(j!=n-1)
            cout<<".";
        }
        cout<<endl;
    }
    return 0;
}

 

六、梦中的统计

 

 

 解题:

 

# include<iostream>

using namespace std;


int m,n;
int a[100]={0};//是一个桶
int main()
{
    cin>>m>>n;
    for(int i=m;i<=n;i++)
    {
        int temp=i;//防止i的值被改变
        while(temp)
        {
            a[temp%10]++;
            temp/=10;
        }
    }
    for(int i=0;i<10;i++)
    cout<<a[i]<<" ";
    return 0;
}

 

七、Bovine Bones G

 

 

 解题:

# include<iostream>

using namespace std;

int s1,s2,s3;
int sum[20001]={0},maxx=0;//桶、出现的最大次数
int maxs=0;//出现最多的数字
int main()
{
    cin>>s1>>s2>>s3;
    for(int i=1;i<=s1;i++)
    {
        for(int j=1;j<=s2;j++)
        {
            for(int k=1;k<=s3;k++)
            {
                sum[i+j+k]++;
            }
        }
    }
    //找出出现最多的数字
    for(int i=s1*s2*s3-1;i>=3;i--)
    {
        if(sum[i]>=maxx)
        {
            maxx=sum[i];
            maxs=i;
        }
        else break;
    }
    cout<<maxs;
    return 0;
}

 

八、蛇形方阵

解题:

# include<iostream>
# include<stdio.h>
using namespace std;

int n;
int a[20][20]={0},k=1;
int x=1,y=0;
//注意边界
int main()
{
    cin>>n;
    while(k<=n*n)
    {
        while(y<n&&!a[x][y+1])a[x][++y]=k++;//向右走
        while(x<n&&!a[x+1][y])a[++x][y]=k++;//向下走
        while(y>1&&!a[x][y-1])a[x][--y]=k++;//向左走
        while(x>1&&!a[x-1][y])a[--x][y]=k++;//向上走
    }
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=n;j++)
        {
            printf("%3d",a[i][j]);//注意输出格式
        }
        cout<<endl;
    }
    return 0;
}

 

九、压缩技术

 解题:

# include<iostream>

using namespace std;

int n,a,cnt=0,sum=0,t=0;
//N、0和1的个数、cnt判断输出0还是1、sum判断输入了几个数了、t控制换行
int main()
{
    cin>>n;
    while(sum<n*n)
    {
        cin>>a;
        sum+=a;
        cnt++;     
        if((cnt+1)%2==0)
        {
            for(int i=0;i<a;i++)
            {
                cout<<"0";
                t++;
                if(t==n)//换行
                {
                    cout<<endl;
                    t=0;
                }
            }

        }
        else
        {
            for(int i=0;i<a;i++)
            {
                cout<<"1";
                t++;
                if(t==n)
                {
                    cout<<endl;
                    t=0;
                }
            }
        }
    } 
    return 0;
}

 

posted @ 2020-09-18 15:49  inss!w!  阅读(231)  评论(0编辑  收藏  举报