2018级《程序设计基础(B)》期末机考--18计科(1801--1806)

今年是哪年?:

签到 :

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int n;
    scanf("%d",&n);
    if(n>=2018)printf("What?\n");
    else printf("I know\n");
    return 0;
}

珂朵莉与黄油面包:

打印图形 ,上下折半分别处理,for 循环实现,数一下 每一行的 空格 的数目与 “ * ” 的数目 与对应行的下标之间的规律即可。

#include<bits/stdc++.h>
using namespace std;
int n;
int main()
{
    scanf("%d",&n);
    for(int i=1; i<=n; i++)
    {
        for(int j=1; j<=n-i; j++)printf(" ");
        printf("*");
        for(int j=1; j<=2*i-3; j++)printf(" ");
        if(i!=1)printf("*");
        printf("\n");
    }
    for(int i=n-1; i>=1; i--)
    {
        for(int j=1; j<=n-i; j++)printf(" ");
        printf("*");
        for(int j=1; j<=2*i-3; j++)printf(" ");
        if(i!=1)printf("*");
        printf("\n");
    }
    return 0;
}

珂朵莉与失忆:

数据 :1 <= l <= r <= 100

可以直接枚举因子判断是否是素数(注意特判 1)。

#include<bits/stdc++.h>
using namespace std;
int n,m,tp,l,r;
int main()
{
    while(~scanf("%d%d",&l,&r))
    {
        int ans=0;
        for(int i=l; i<=r; i++)
        {
            bool flag=0;
            if(i==1)flag=1;
            for(int j=2; j<=sqrt(i); j++)
                if(i%j==0)flag=1;
            if(!flag)
            {
                tp=i;
                while(tp)
                {
                    ans+=tp%10;
                    tp/=10;
                }
            }
        }
        printf("%d\n",ans);
    }
    return 0;
}

珂朵莉与圣剑

注意数据类型 ,选择自己喜欢的排序实现即可

#include<bits/stdc++.h>
using namespace std;
struct node
{
    int x,y;
    double z;
    bool operator < (const node &c)const
    {
        return z>c.z;
    }
} a[1234];
int main()
{
    int n,k;
    double c,d;
    scanf("%d%d",&n,&k);
    for(int i=0; i<n; i++)
    {
        scanf("%d%d",&a[i].x,&a[i].y);
        c=a[i].x;
        d=a[i].y;
        a[i].z=c/d;
    }
    sort(a,a+n);
    printf("%.2lf\n",a[k-1].z);
    return 0;
}

珂朵莉与斯卡布罗集市

由于数字都不同可以唯一确定 某个数的位置。查找其位置,

坐标(x1, y1)的 i 点与坐标(x2, y2)的 j 点的 曼哈顿距离 为:

d(i,j) = |X1-X2| + |Y1-Y2|.

#include<bits/stdc++.h>
using namespace std;
int n,m,x,y,a[123][123],xx;
int main()
{
    scanf("%d%d",&n,&m);
    for(int i=1; i<=n; i++)
        for(int j=1; j<=m; j++)
        {
            scanf("%d",&a[i][j]);
            if(a[i][j]==1)x=i,y=j;
        }
    scanf("%d",&xx);
    for(int i=1; i<=n; i++)
        for(int j=1; j<=m; j++)
        {
            if(xx==a[i][j])
            {
                printf("%d\n",abs(i-x)+abs(j-y));
                return 0;
            }
        }
    return 0;
}

珂朵莉与妖精仓库的妖精们

直接预处理存储四个名字 ,遍历统计计数即可。

#include<bits/stdc++.h>
using namespace std;
int a[5],len;
string s[5]= {"Nephren","Ithea","Rhantolk","Nopht"},str;
int main()
{

    cin>>str;
    len=str.size();
    for(int i=0; i<len; i++)
        for(int j=0; j<4; j++)
        {
            bool flag=0;
            for(int k=0; k<s[j].size(); k++)
                if(str[i+k]!=s[j][k])flag=1;
            if(flag==0)
            {
                a[j]++;
            }
        }
    for(int i=0; i<4; i++)
       cout<<s[i]<<": "<<a[i]<<endl;
    return 0;
}

珂朵莉与圣剑保养

按照题目要求函数实现即可:

#include<bits/stdc++.h>
using namespace std;
int n,m;
int cal(int x,int y)
{
    if(x*y<=7)return x*y;
    else if(x>=0&&y>=0)return cal(x-2,cal(x-1,y-1));
    else if(m<0||n<0)return 1;
}
int main()
{
    while(~scanf("%d%d",&n,&m))
    {
        printf("%d\n",cal(n,m));
    }
    return 0;
}

最终之战

模拟,可以 循环实现,使用队列方便一点 

#include<bits/stdc++.h>
using namespace std;
#define maxn 12
int ans;
map<string,int>jian;
struct node
{
    string str;
    double xue,gong,fang,su;
    int big;
    bool operator<(const node &c)const
    {
        return big<c.big;
    }
} b[maxn],cp;
struct edg
{
    string ss,dao;
    double xue,gong,fang,su;
} data[maxn],tp;
int main()
{
    jian["Perseval"]=78;
    jian["Ceniolis"]=43;
    jian["Valgaris"]=110;
    jian["Insania"]=23;
    bool flag;
    queue<edg>que;
    priority_queue<node>q;
    for(int i=0; i<4; i++)
    {
        cin>>data[i].ss>>data[i].xue>>data[i].gong>>data[i].fang>>data[i].su>>data[i].dao;
        que.push(data[i]);
    }
    for(int i=6; i>=0; i--)
    {
        cin>>b[i].su;
        b[i].big=i;
    }
    b[6].xue=2333,b[6].gong=100,b[6].fang=7;
    b[5].xue=600,b[5].gong=34,b[5].fang=4;
    b[4].xue=200,b[4].gong=24,b[4].fang=3;
    b[3].xue=400,b[3].gong=43,b[3].fang=9;
    b[2].xue=500,b[2].gong=34,b[2].fang=3;
    b[1].xue=1100,b[1].gong=65,b[1].fang=6;
    b[0].xue=1400,b[0].gong=90,b[0].fang=2;
    for(int i=6; i>=0; i--)
        q.push(b[i]);
    while(1)
    {
        tp=que.front();
        que.pop();
        cp=q.top();
        q.pop();
        if(tp.su<cp.su)
        {
            cp.xue-=(tp.gong+jian[tp.dao]-cp.fang);
            tp.xue-=(cp.gong*2-2*tp.fang);
        }
        else if(tp.su>cp.su)
        {
            cp.xue-=(tp.gong+jian[tp.dao]-cp.fang)*2;
            tp.xue-=(cp.gong-tp.fang);
        }
        else
        {
            cp.xue-=(tp.gong+jian[tp.dao]-cp.fang);
            tp.xue-=(cp.gong-tp.fang);
        }
        if(cp.xue>0)q.push(cp);
        if(tp.xue>0)que.push(tp);
        ans++;
        if(q.size()==0)
        {
            flag=1;
            break;
        }
        if(que.empty())
        {
            flag=0;
            break;
        }
    }
    if(flag)
        printf("%d\n",ans);
    else printf("BOOM!\n");
    return 0;
}

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值