第四次周赛补题赛

直接开始吧

A:

在这里插入图片描述
题意:明显的这是选"Y",“Z”,"J"这三个字母排序,要选择n次,不能出现两个"Z"连在一起的情况.
思路:乍一看这题它很长,看起来很难,其实只要自己算一下就可以发现这是一道可以找规律的题,而且这道题的规律很好找.(规律:a[1]+a[2]=a[3])

参考代码:
#include<stdio.h>
#include<string.h>
int main()
{
    long long a[10005],n,i;
    while(~scanf("%lld",&n))
    {
        a[1]=3;
        a[2]=8;
    for(i=3;i<=n;i++)
    {
        a[i]=2*(a[i-1]+a[i-2]);
    }
    printf("%lld\n",a[n]);
    }
}
B:

在这里插入图片描述
题意:回扫雷规则的都能明显的看出来这道题的意思都9102年了应该不会有和我同年的还不会玩扫雷吧,简单的说就是当遇到" * “时其附近的个格子要加一.
思路:用二维的字符串组来进行输入,从(1,1)开始输入,但遇到” * "时使该位置的附近八个格子对应位置的二维数组的值加一,判断一下输出二维数组就完事了.

参考代码:
#include<stdio.h>
#include<string.h>
int main()
{
    char ch[1005][1005];
    int a[1005][1005]={0};
    int i,j,n,m;
    scanf("%d%d",&n,&m);
    for(i=1;i<=n;i++)
    {
        for(j=1;j<=m;j++)
        {
            scanf(" %c",&ch[i][j]);
            if(ch[i][j]=='*')
            {
                a[i-1][j-1]++;
                a[i-1][j]++;
                a[i-1][j+1]++;
                a[i][j-1]++;
                a[i][j+1]++;
                a[i+1][j-1]++;
                a[i+1][j]++;
                a[i+1][j+1]++;
            }
         }
    }
    for(i=1;i<=n;i++)
    {
        for(j=1;j<=m;j++)
        {
            if(ch[i][j]=='*')
            printf("*");
            else printf("%d",a[i][j]);
        }
        printf("\n");
    }
}
C

在这里插入图片描述
题意:输入多个长方形的编号**(可重复),长,宽(除编号外,大的数是长,短的是宽)**,然后去重,排序后再输出长方形的编号,长,宽.
思路:用结构体输入,然判断一下那个是长,那个是宽.然后用sort排序,在去重输出.

参考代码:
#include<bits/stdc++.h>
#include<string.h>
#include<stack>
using namespace std;
struct lport
{
    int n,c,k;
}v[10005];
bool hg(lport a,lport b)
{
    if(a.n==b.n)
    {
        if(a.c==b.c)
        {
            return a.k<b.k;
        }
        else return a.c<b.c;
    }
    else return a.n<=b.n;
}
int main()
{
    int t,m,i,s;
    scanf("%d",&t);
    while(t--)
    {
        scanf("%d",&m);
        for(i=0;i<m;i++)
        {
            scanf("%d%d%d",&v[i].n,&v[i].c,&v[i].k);
            if(v[i].c<v[i].k)
            {
                s=v[i].k;
                v[i].k=v[i].c;
                v[i].c=s;
            }
        }
        sort(v,v+m,hg);
        for(i=0;i<m-1;i++)
        {
            if(v[i].n==v[i+1].n&&v[i].c==v[i+1].c&&v[i].k==v[i+1].k)
                continue;
            else printf("%d %d %d\n",v[i].n,v[i].c,v[i].k);
        }
        printf("%d %d %d\n",v[m-1].n,v[m-1].c,v[m-1].k);
    }
}
D:

听说是初中物理题,但是我觉得这是初中数学题
在这里插入图片描述
题意:给你上电梯时走了多少步,下电梯走多少步,让你求出电梯有多少阶是在外露的.
思路:初中题,不会的话找规律.

参考代码:
#include<stdio.h>
#include<string.h>
int main()
{
    int n,m,s;
    scanf("%d%d",&n,&m);
    s=(m*n)/((m+n)/2);
    printf("%d",s);
}
E:

在这里插入图片描述
题意:给出两个字符串,判断他们所含的个个字母的数量是不是相等的.
思路:输入两个字符串后先判断两个字符串是否相等,如不相等,则在用sort排序后判断排序后是否相等.

参考代码:
#include<bits/stdc++.h>
#include<stdio.h>
#include<stack>
#include<string.h>
using namespace std;
int main()
{
    char ch[1000005],c[1000005];
    int n;
    scanf("%d%s%s",&n,ch,c);
    if(strcmp(ch,c)==0)
    {
        printf("no");
        return 0;
    }
    sort(ch,ch+n);
    sort(c,c+n);
    if(strcmp(ch,c)==0)
        printf("yes");
    else printf("no");
}
F:

在这里插入图片描述
题意:给定一定数量的火柴n,判断能形成a+b=c的等式多少个.
思路:先确定a,b,c的取值范围,在用双重for循环运行a+b=c.在判断a,b,c的使用的火柴数是否等于n-4.

参考代码:
#include<stdio.h>
#include<string.h>
int lport(int y)
{
    int s=0,a[10]={6,2,5,5,4,5,6,3,7,6};
    while(y/10!=0)
    {
        s+=a[y%10];
        y/=10;
    }s+=a[y];
    return s;
}
int main()
{
    int n,a,b,c,s=0;
    scanf("%d",&n);
    for(a=0;a<=1111;a++)
        for(b=0;b<=1111;b++)
    {
        c=a+b;
        if((lport(c)+lport(b)+lport(a))==n-4)
            s++;
    }
    printf("%d\n",s);
}
G:

在这里插入图片描述
题意:给你两个三位数,判断它们两个相加需要进位多少次.
思路:类似大数加法的做法.输入两个字符串,在相加是判断进位次数即可.

参考代码:
#include<stdio.h>
#include<string.h>
int main()
{
    char ch[10005],c[10005];
    while(~scanf("%s%s",ch,c))
    {
        if(ch[0]=='0'&&c[0]=='0')
            break;
        else
        {
            int t=0,s=0;
            for(int i=2;i>=0;i--)
            {
                t=((ch[i]-'0')+(c[i]-'0')+t)/10;
                if(t==1)
                    s++;
            }
            printf("%d\n",s);
        }
    }
}
H:

在这里插入图片描述
题意:让一个数加与减2不需要花费代价,加或减1需要花费1的代价,先给出n个数,判断让这n个数相等时需要多少的代价
思路:其实这是一个判断奇偶数的题,因为奇数变奇数不需要代价,偶变偶也不需要代价.

参考代码:
#include<stdio.h>
#include<string.h>
int main()
{
    long n,a[10000005],t=0,m=0;
    scanf("%d",&n);
    for(long i=1;i<=n;i++)
        scanf("%d",&a[i]);
    for(long i=1;i<=n;i++)
    {
        if(a[i]%2==1)
            t++;
        else m++;
    }
    if(t>m)
        printf("%d",m);
    else printf("%d",t);
}
I:

在这里插入图片描述
题意:找人盖楼,要看等级那种,如果找的人的等级小于已经找过的人的等级,就不需要它帮忙盖楼,最后输出找过的人的等级之和.
思路:用数组输入,然后对每个数进行判断是否大于已经出现过的最大数,最后让这些数求和即可.

参考代码:
#include<stdio.h>
#include<string.h>
int main()
{
    long n,m,s=0;
    scanf("%ld",&n);
    int a[10000005];
    for(int i=1;i<=n;i++)
    {
        scanf("%ld",&a[i]);
    }m=a[1];s=m;
    for(int i=2;i<=n;i++)
    {
        if(a[i]>=m)
        {
            m=a[i];
            s+=m;
        }
    }
    printf("%ld",s);
}
J:

说实话这题真的水,可能唯一的难点在于是全英文的题

在这里插入图片描述
题意:给个n,输出n行I love ACM,ACM is my beliefl
思路:单重for循环输出即可**(记得换行)**

参考代码:个人觉得好像这题不给可以的
#include<stdio.h>
#include<string.h>
int main()
{
    int n;
    scanf("%d",&n);
    while(n--)
    {
        printf("I love ACM,ACM is my belief!\n");
    }
}
K:

I一样水.
建国70周年纪念
在这里插入图片描述
题意:判断中国n周年是公元纪年多少年.
思路类似a+b,只是变成1949+n罢了

参考代码:

#include<stdio.h>
#include<string.h>
int main()
{
    int n;
    scanf("%d",&n);
    printf("%d",1949+n);
}
M:

在这里插入图片描述
题意:就是现在A仓库装n的货物(有编号),在经过m个超市时会遇到取一个货和装一个货(有编号),的情况,如果是取货物,则只能去取最外面的一个货物,等到了B仓库,把所有的货卸了,输出卸货的编号.
思路:简单的栈的问题,用栈解很快的.

参考代码:
#include<bits/stdc++.h>
#include<stdio.h>
#include<stack>
using namespace std;
int main()
{
    int n,m,i;
    stack<int>q;
    scanf("%d%d",&n,&m);
    for(i=1;i<=n;i++)
    {
        q.push(i);
    }
        while(m--)
    {
        int a;
        scanf("%d",&a);
        if(a==2)
            q.pop();
        else
        {
            int c;
            scanf("%d",&c);
            q.push(c);
        }
    }
    if(q.empty())
        printf("NO");
    else
        while(!q.empty())
    {
        int y=q.top();
        q.pop();
        printf("%d ",y);
    }
}

完结撒花!!!ヾ(≧O≦)〃

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值