天天看点

期末第二场题解

御坂美琴与妹妹们

#include <bits/stdc++.h>
using namespace std;
int main()
{
    int n;
    scanf("%d",&n);
    if(n>=1&&n<=20000)
        printf("SISTER\n");
    else
        printf("LastOrder\n");
    return 0;
}
           

御坂美琴与呱太

排一遍序,买便宜的。
#include <bits/stdc++.h>
using namespace std;
int main()
{
    int n,x;
    int a[150];
    scanf("%d%d",&n,&x);
    for(int i=1;i<=n;i++)
        scanf("%d",&a[i]);
    sort(a+1,a+1+n);
    int sum=0;
    for(int i=1;i<=n;i++)
    {
        if(x>=a[i])
        {
            x-=a[i];
            sum++;
        }
        else
            break;
    }
    printf("%d\n",sum);
    return 0;
}
           

御坂美琴与佐天泪子

判断一下编号是不是素数,如果是优先值乘2倍,不是的话直接整除运算就可以
#include <bits/stdc++.h>
using namespace std;
bool vis[150];
void getprime()
{
    memset(vis,false,sizeof(vis));
    vis[1]=true;
    for(int i=2;i<=150;i++)
    {
        if(!vis[i])
        for(int j=i+i;j<=150;j+=i)
            vis[j]=true;
    }
}
int main()
{
    getprime();
    int n;
    int a,b;
    int ans[150];
    scanf("%d",&n);
    int o=0;
    for(int i=1;i<=n;i++)
    {
        scanf("%d%d",&a,&b);
        int temp=a/(b+1);
        if(!vis[i])
            temp=temp*2;
        ans[++o]=temp;
    }
    for(int i=1;i<o;i++)
        printf("%d ",ans[i]);
    printf("%d\n",ans[o]);
    return 0;
}
           

真正的落雷

先把二位字符数组初始化为'.',然后再把与中心位置距离小于等于k的赋值为’*‘。memset用来是把st初始化的。
#include <bits/stdc++.h>
using namespace std;
int main()
{
    int n,m,x,y,k;
    char st[500][500];
    memset(st,'.',sizeof(st));
    scanf("%d%d%d%d%d",&n,&m,&x,&y,&k);
    x-=1,y-=1;
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<m;j++)
        {
            if(abs(x-i)+abs(y-j)<=k)
                st[i][j]='*';
        }
    }
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<m;j++)
            printf("%c",st[i][j]);
        printf("\n");
    }
    return 0;
}
           

御坂美琴与初春饰利

先把为大写字母的判断出来并输出,然后把为数字的判断出来并输出
#include <stdio.h>
int main()
{
    int n;
    char st[150];
    scanf("%d %s",&n,st);
    for(int i=0;i<n;i++)
    {
        if(st[i]>='A'&&st[i]<='Z')
            printf("%c",st[i]);
    }
    printf("\n");
    for(int i=0;i<n;i++)
    {
        if(st[i]>='0'&&st[i]<='9')
            printf("%c",st[i]);
    }
    printf("\n");
    return 0;
}
           

御坂美琴与白井黑子

按照题目意思写递归函数就行
#include <bits/stdc++.h>
using namespace std;
int F(int x,int y)
{
    if(y!=0)
        return F(x,y-1)+F(x-1,y-1);
    else
        return x+1;
}
int main()
{
    int x,y;
    scanf("%d%d",&x,&y);
    int ans=F(x,y);
    printf("%d\n",ans);
    return 0;
}
           

御坂美琴与伙伴们

把二维数组的值存到一维数组里面,然后由大到小排序,然后每个人依次取第一个元素值就可以。
#include <bits/stdc++.h>
using namespace std;
bool cmp(int a,int b)
{
    return a>b;
}
int main()
{
    int n,m;
    int data[50][50];
    int a[1000];
    int o=0;
    scanf("%d%d",&n,&m);
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=m;j++)
        {
            scanf("%d",&data[i][j]);
            a[++o]=data[i][j];
        }
    }
    sort(a+1,a+1+o,cmp);
    int b[1000],c[1000];
    int p=0,q=0;
    int a1=0,a2=0,a3=0,a4=0;
    bool vis[1000];
    memset(vis,false,sizeof(vis));
    for(int i=1;i<=o;i++)
    {
        if(i%2)
            b[++p]=a[i];
        else
            c[++q]=a[i];
    }
    for(int i=1;i<=p;i++)
    {
        if(i%2)
            a1+=b[i];
        else
            a3+=b[i];
    }
    for(int i=1;i<=q;i++)
    {
        if(i%2)
            a2+=c[i];
        else
            a4+=c[i];
    }
    printf("%d %d %d %d\n",a1,a2,a3,a4);
    return 0;
}
           

一方通行与最后之作

按照题目意思模拟即可,判断一下这一步该谁走,该往哪个方向走,有没有超出边界范围或是不是’*‘,如果是的话就不走,然后再判断一下走完这一步之后,是不是相遇了,如果相遇,用个数组存下来,并且把走过的步数用个变量存下来。
#include <bits/stdc++.h>
using namespace std;
int main()
{
    int n,m,k;
    char st[150][150];
    scanf("%d%d",&n,&m);
    int x1,y1,x2,y2;
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=m;j++)
        {
            scanf(" %c",&st[i][j]);
            if(st[i][j]=='A')
            {
                x1=i;
                y1=j;
            }
            else if(st[i][j]=='L')
            {
                x2=i;
                y2=j;
            }
        }
    }
    scanf("%d",&k);
    char name[50],op[50],ans[50];
    bool flag=false;
    int sum=0;
    for(int i=1;i<=k;i++)
    {
        int temp;
        scanf("%s %s",name,op);
        if(strcmp(name,"Accelerator")==0)
        {
            bool tt=false;
            if(strcmp(op,"down")==0)
            {
                temp=x1+1;
                if(st[temp][y1]!='*'&&temp>=1&&temp<=n)
                {
                    tt=true;
                    x1++;
                }
            }
            else if(strcmp(op,"up")==0)
            {
                temp=x1-1;
                if(st[temp][y1]!='*'&&temp>=1&&temp<=n)
                {
                    tt=true;
                    x1--;
                }
            }
            else if(strcmp(op,"left")==0)
            {
                temp=y1-1;
                if(st[x1][temp]!='*'&&temp>=1&&temp<=m)
                {
                    tt=true;
                    y1--;
                }
            }
            else
            {
                temp=y1+1;
                if(st[x1][temp]!='*'&&temp>=1&&temp<=m)
                {
                    tt=true;
                    y1++;
                }
            }
            if(flag==false&&tt)
                sum++;
            if(x1==x2&&y1==y2&&flag==false)
            {
                strcpy(ans,"Accelerator");
                flag=true;
            }
        }
        if(strcmp(name,"LastOrder")==0)
        {
            bool t2=false;
            if(strcmp(op,"down")==0)
            {
                temp=x2+1;
                if(st[temp][y2]!='*'&&temp>=1&&temp<=n)
                {
                    t2=true;
                    x2++;
                }
            }
            else if(strcmp(op,"up")==0)
            {
                temp=x2-1;
                if(st[temp][y2]!='*'&&temp>=1&&temp<=n)
                {
                    t2=true;
                    x2--;
                }
            }
            else if(strcmp(op,"left")==0)
            {
                temp=y2-1;
                if(st[x2][temp]!='*'&&temp>=1&&temp<=m)
                {
                    t2=true;
                    y2--;
                }
            }
            else
            {
                temp=y2+1;
                if(st[x2][temp]!='*'&&temp>=1&&temp<=m)
                {
                    t2=true;
                    y2++;
                }
            }
            if(flag==false&&t2)
                sum++;
            if(x1==x2&&y1==y2&&flag==false)
            {
                strcpy(ans,"MisakaMisaka");
                flag=true;
            }
        }
    }
    printf("%s\n%d\n",ans,sum);
    return 0;
}