您现在的位置是:首页 >技术交流 >CSDN第49期编程竞赛活动经验网站首页技术交流
CSDN第49期编程竞赛活动经验
简介CSDN第49期编程竞赛活动经验
都是以前考过的题目,但再来一次还是没能全过
1. 题目名称:隧道逃生
小海豚喜欢打游戏,现在它在操纵游戏人物小C逃脱废弃的隧道,逃生装置在小C的前方 X米远的位置。但是游戏机只有两个按钮:前进和后退,按前进,小C会前进 m 米,按后退,小C会后退 n 米。
小海豚必须设法把小C送到逃生装置上, 方能逃离隧道,请你帮帮小海豚,告诉它至少要操作多少次,才能通关。
初始化数字0,小于X就加m,大于X就减n
最好得到次数
void solution(int X, int m, int n) {
int s=0;
int count=0;
while(s!=X) {
if(s<X) {
s+=m;
} else {
s-=n;
}
count++;
}
printf("%d",count);
}
2. 题目名称:小艺照镜子
已知字符串str。 输出字符串str中最长回文串的长度。
我用的也是暴力破解,就是不明白还没没有全过
int max(int a,int b) {
return a>b?a:b;
}
void solution(char*s) {
int len=strlen(s);
int maxlen=1;
for (int i=0;i<len;i++) {
int left=i;
int right=i;
int tmplen=1;
while(s[left]==s[right]) {
tmplen+=2;
if(left==0||right+1==len) {
break;
}
left--;
right++;
}
maxlen=max(maxlen,tmplen-2);
}
for (int i=0;i<len-1;i++) {
int left=i;
int right=i+1;
if(s[left]!=s[right]) {
continue;
}
int tmplen=2;
while(s[left]==s[right]) {
tmplen+=2;
if(left==0||right+1==len) {
break;
}
left--;
right++;
}
maxlen=max(maxlen,tmplen-2);
}
printf("%d",maxlen);
}
3. 题目名称:大整数替换数位
以字符串的形式给你一个长度为 M 的整数 N,请你计算出对这个数进行一次操作后模 9 的值为 1 的所有可能的不同操作 方式。 在一次操作中, 我们可以选择 N 的一个数位 N[i],并把它替换成另一个不同的 0 到 9 范围之内的数 B,两种操作方式不同当且仅当它们选择的 i 或 B 不同。
要有点数学知识,所有位上的数字和是3的倍数能整除3,是9的倍数能整除9。方法就是遍历后尝试各种数字。
void solution(int M,char*str) {
int count=0;
for (int i=0;i<M;i++) {
count+=(str[i]-'0');
}
//printf("%d %d %s
",M,count,str);
int flag[10]= {
0
}
;
for (int i=0;i<10;i++) {
for (int j=0;j<10;j++) {
if(j==i) {
continue;
}
if((count-i+j)%9==1) {
flag[i]++;
}
}
}
int s=0;
for (int i=0;i<M;i++) {
int j=str[i]-'0';
s+=flag[j];
}
printf("%d",s);
}
4. 题目名称:清理磁盘空间
小明电脑空间满了,决定清空间。为了简化问题,小明列了他个人文件夹(/data)中所有末级文件路径和大小,挑选出总 大小为 m 的删除方案,求所有删除方案中,删除操作次数最小是多少。 一次删除操作:删除文件或者删除文件夹。如果删除文件夹,那么该文件夹包含的文件都将被删除。 文件夹的大小:文件夹中所有末级文件大小之和
最复杂的一道题目了
没做出来,拿点分还是不难
就判断了 操作次数为1和2的情况,其它情况返回了-1
这样也有60%的通过率
风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。