蓝桥杯16届第二次模拟

今天考试去了,学校组织嘞,但俺没有拿手机拍题,遵纪守法好学生,考试就是考试,去厕所也没看。

第一题,和上次的第一题是一样的2024的质因数有仨,这个就不说了,好像是2,11,23这三个。

第二题,是2024和1024的最小公倍数,蛮简单验证也简单

#include<stdio.h>
int main()
{
    int i=2024;
    for(i;i<=2024*1024;i++)
    if(i%2024==0&&i%1024==0)
    printf("%d");
    return 0;
}

第三题,是按位异或找2024内有几个数和2024按位异或小于2024 这个其实蛮简单的

给大家说下思路2024的二进制大概长这样11111101000(不对哈,后五位是对的,前面有几个一我给忘了)也就是说,第一种情况嘞只要前面几位都等于00000就行啦,把后面的三位000随便改,只要不全是零,异或就比2024大;这是七个了哦,第二种同理就是倒数第五位变为1后四位随便边想变啥,变啥不怕,全是零也中,只要倒数第五位是一就行这是16种,没了,这道题就别敲了,嘻嘻:)答案就是2024-16-7=2001。

第四题,就挺好玩嘞(虽然我写错了)太想当然了,不得不佩服电脑强大的力量,题目是,我的角色现在是lv.1,每一步有三个选项1,选择花一块钱升一级。2,选择三块钱升x级(当前数单个位的最大值)。3,花费十块钱翻倍升级,这道题没敲代码.

2024/2=1012,然后1012/2=506,然后506/2=253,然后253/2=126.....1再然后126/2=63,63/2=31......1,到31就开始乘2.后面一定是最省钱的了应该,因为加三次2选项最多是24。所以当数大于24就要选乘2.

那么也就是考虑前几块钱咋升1 到 2 到 3 肯定是一块一块的 那什么时候用第二项呢如果从3开始用到6也是3块用第一项也是三块 。那从4开始用三块的就是直接8再用2项到16然后17然后直接24到了24,再变成25,30,就到了31了;就可以和我们之前写那个接轨了

但我算出来是80:(这种题不能想当然,说不定有哪种方法更便宜到2024级。考完有了个类似于鸡兔同笼的设想嘿,就是假设我全部的步骤都是1,全部都是2,全部都是3,找很多种到31的情况也就是为了严谨把每一种都方法所有的路都让计算机试一下,找到所有可以凑成31的(但现在有点菜,有没有大神帮我实现一下教教我,在下感激不尽:)网上说答案是79,真的是差之毫厘谬以千里啊

第五题就更好玩了,一大堆数(100个),题干中是用逗号隔开的,找出若干个数相加是24的倍数,这道题就有意思啦,咋输入呢,ctrlc+ctrlv,先复制到微信上,把中间的换行去掉先,再把最后一个后面也换成逗号,然后

int n;
for(int i=0;i<100;i++)
scanf("%d,",&n);

输入的时候加个,(逗号)就方便复制辣,算出sum,用sum%24找到余数,我们去掉一个%24=23的数就好啦,我记得若果去掉单项最小值那个最小的是605,那我们就先找找那些比较小的值加一加试试,找到了,那最好,找不到,就当没找过,找不到就这样子↓

for(int i=0;i<100;i++)
for(int j=0;j<100;j++)
{
    if((a[i]+a[j])%24==23)
    printf("%d",a[i][j]);
}

一个个加加看呗,电脑这算数忒快了,嗖都出来了,答案应该是49176叭。

第六题不说了,小学的帮老师查多少辆车可以装满孩子的问题

第七题是输入n,在输入n个正数,找到最小的偶数↓

#include<stdio.h>
int main()
{
    int n;
    int a[10000];
    scanf("%d",&n);
    int i,min=1000000;
    for(i=0;i<n;i++)
    scanf("%d",&a[i]);
    for(i=0;i<n;i++)
    if(min>a[i]&&a[i]%2==0)
    min=a[i];
    printf("%d\n",min);
    return 0;
}

第八题是在一字符串中找到LANQIAO必须是正向顺序的如果是OAIQL是NO

例如LLLLLAAAANNNNQQQQIIIIAAAO

输出YES                (正顺序包含蓝桥)

#include<stdio.h>
#include<string.h>
int main()
{
    char a[1000];
    gets(a);
    int n=strlen(a);
    int i,z=0;
    for(i=0;i<n;i++)
    {
        if(a[i]=='L')
        {z++;
        break;}
    }
    for(i=i+1;i<n;i++)
    {
        if(a[i]=='A')
        {z++;
        break;}
    }
    for(i=i+1;i<n;i++)
    {
        if(a[i]=='N')
       { z++;
        break;}
    }
    for(i=i+1;i<n;i++)
    {
        if(a[i]=='Q')
        {z++;
        break;}
    }
    for(i=i+1;i<n;i++)
    {
        if(a[i]=='I')
        {z++;
        break;}
    }
    for(i=i+1;i<n;i++)
    {
        if(a[i]=='A')
        {z++;
        break;}
    }
    for(i=i+1;i<n;i++)
    {
        if(a[i]=='O')
       { z++;
        break;}
    }
    if(z==7)
    printf("YES");
    else
    printf("NO");
    return 0;
}

第九题就怪了

(1)遍历所有左上角位置 (x1, y1):从矩阵的每个可能的左上角点开始,计算可能的“口”字形区域。
(2)遍历所有可能的边长 l:对于每个左上角点 (x1, y1),遍历不同的边长 l,计算对应的右下角 (x2, y2)。
(3)计算“口”字形区域的和:
      通过四条边(左竖边、上横边、右竖边、下横边)计算区域和。
      减去重复计算的四个角点。
(4)更新最大和:每次计算出新的区域和时,更新当前最大值。
(5)返回结果:返回所有可能的“口”字形区域的最大和。

我的代码按样例是对的,但我自己换些其他的就老是错请各位大哥们帮小弟looklook

#include<stdio.h>
int main()
{
    int a[300][300];
    int x,y,p,q;
    int m,n,i,j;
    int max=0;
    scanf("%d %d",&m,&n);
    for(i=0;i<m;i++)
    for(j=0;j<n;j++)
    {
        scanf("%d",&a[i][j]);
    }
    for(x=1;x<=n;x++)
    for(y=1;y<=m;y++)
    {
        for(p=x,q=y;p<=n,q<=m;p++,q++)
        {
           int sum=0;
           for(i=0;i<m;i++)
           for(j=0;j<n;j++)
           if(j+1<q&&j+1>=y&&i+1==x)
           sum=sum+a[i][j];
           if(j+1<=q&&j+1>y&&i+1==p)
           sum=sum+a[i][j];
           if(i+1<=p&&i+1>=x&&j+1==q)
           sum=sum+a[i][j];
           if(i+1<=p&&i+1>=x&&j+1==y)
           sum=sum+a[i][j];
           if(sum>max)
           max=sum;
        }
    }
    printf("%d",max);
    return 0;
}

俺感觉俺的思路也没啥问题,求救(感恩不尽)!!!

第十题maojia写(河南话)

题目是
初始位置为 (0, 0)
模拟路径:
对于每个移动指令,按顺序执行:
   'F':向当前方向前进一格。
   'L':左转,改变方向。
   'R':右转,改变方向。
尝试替换每一步指令:
   对每个指令位置,尝试用 'F', 'L', 'R' 替换原指令,并重新模拟一遍路径,计算不同的最终位置。
   如果替换后的路径到达的位置不在之前的路径中,则把它加入结果集合 result。
输出结果:
   最后,输出集合 result 的大小,即不同的最终位置数量

来个大神help 么:)感谢您的观看,若有宝贵意见希望可以留下,小的感恩不尽:)

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值