今天考试去了,学校组织嘞,但俺没有拿手机拍题,遵纪守法好学生,考试就是考试,去厕所也没看。
第一题,和上次的第一题是一样的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 么:)感谢您的观看,若有宝贵意见希望可以留下,小的感恩不尽:)