某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;
}