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\n",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%的通过率

你可能感兴趣的:(算法)