秋招笔试题——嵌入式软件开发

某VO:

//给定一个非空字符串str,在最多可以删除一个字符的情况下
//请编程判定其能否成为回文字符串;
//如果可以则输出首次删除一个字符所能得到的回文字符串,
//如果不行则输出字符串"false”。
bool
isSpecial(char* string) {
	int len = strlen(string);
	if (len <= 1) return true;
	int head = 0, tail = len - 1;
	while (head < tail) {
		if (string[head++] != string[tail--])
			return false;
	} return true;
}


char*
isAns(char* string) {
	int len = strlen(string);
	if (1 == len) return string;
	if (2 == len) return &string[1];
	if (isSpecial(string)) return string;

	char* newstring = (char*)malloc(sizeof(char) * len);
	for (int i = 0; i < len; i++) {
		for (int j = 0; j < i; j++) {
			newstring[j] = string[j];
		} //忽略第i项

		for (int k = i + 1; k < len; k++) {
			newstring[k - 1] = string[k];
		} newstring[len - 1] = '\0';

		if (isSpecial(newstring))
			return newstring;
	} return "false";
}


int
main(int argc, char* argv[])
{
	char arr[] = "abda";
	char* ret = isAns(arr);
	printf("%s", ret);
	return 0;
}

某米:

//给定一个二维网格和一个单词,找出该单词是否存在于网格中。
//单词必须按照字母顺序,通过相邻的单元格内的字母构成,
//其中“相邻”单元格是那些水平相邻或垂直相邻的单元格, 
//同一个单元格内的字母不允许被重复使用。
//二维网格为:
/*	char stupidTable[3][4] = {
		{'A', 'B', 'C', 'E'},
		{'S', 'F', 'C', 'S'},
		{'A', 'D', 'E', 'E'}
};*/


int
main(int argc, char* argv[])
{
	char getInput[13];
	scanf("%s", getInput);
	int len = strlen(getInput);
	int hashtable[26] = { 0 };

	for (int i = 0; i < len; i++) {
		if (!((getInput[i] >= 'A' && getInput[i] <= 'F') || (getInput[i] == 'S'))) {
			printf("false");
			return 0;
		} else {
			hashtable[getInput[i] - 'A']++;
		}
	}

	if ((hashtable['A' - 'A'] > 2) ||
		(hashtable['B' - 'A'] > 1) ||
		(hashtable['C' - 'A'] > 2) ||
		(hashtable['D' - 'A'] > 1) ||
		(hashtable['E' - 'A'] > 3) ||
		(hashtable['F' - 'A'] > 1) ||
		(hashtable['S' - 'A'] > 2)) {
		printf("false");
	} else {
		printf("true");
	}

	return 0;
}

某米:

//注册网站时,需要使用包含不同类型(数字、符号、大写字母、小写字母)的字符,和特定长度。
//检查一个密码内容同时包含以上 4 种类型的字符,
//并且长度在8 - 120 个字符之间。
//符合要求,返回 0;
//长度不符合返回 1;
//类型不符合要求返还 2。
//可以一次输入多组密码,以空格符间隔,空格符不作为密码。
int
main(int argc, char* argv[])
{
	char temp[250];
	while (EOF != scanf("%s", temp)) {
		int len = strlen(temp);
		if (len < 8 || len>120) {
			printf("%d\r\n", 1);
		} else {
			int hasDigit = 0, hasSign = 0, hasUpper = 0, hasLower = 0;
			int i = 0;
			for (; i < len && !(hasDigit * hasSign * hasUpper * hasLower); i++) {
				if (isdigit(temp[i]) != 0) hasDigit++;
				if (isupper(temp[i]) != 0) hasUpper++;
				if (islower(temp[i]) != 0) hasLower++;
				if (isdigit(temp[i]) * isupper(temp[i]) * islower(temp[i]) == 0) hasSign++;
			} printf("%d\r\n", (i != len) ? 0 : 2);
		}
	} return 0;
}
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值