当前位置:首页 > c语言竞赛题目精选
Flag[k++] = i;
Combine(n-1, Value-Stamp[i]); Flag[--k] = 0; }
return Found; }
int main(int argc, char* argv[]) {
for(int i=1; Combine(N, i); i++, Found=0); }
10、大整数数相乘的问题。(这是2002年在一考研班上遇到的算法题) void Multiple(char A[], char B[], char C[]) { int TMP, In=0, LenA=-1, LenB=-1; while(A[++LenA] != '\\0'); while(B[++LenB] != '\\0');
int Index, Start = LenA + LenB - 1; for(int i=LenB-1; i>=0; i--) { Index = Start--; if(B[i] != '0') {
for(int In=0, j=LenA-1; j>=0; j--) {
TMP = (C[Index]-'0') + (A[j]-'0') * (B[i] - '0') + In; C[Index--] = TMP % 10 + '0'; In = TMP / 10; }
C[Index] = In + '0'; } } }
11、求最大连续递增数字串(如“ads3sl456789DF3456ld345AA”中的“456789”) int GetSubString(char *strSource, char *strResult) { int iTmp=0, iHead=0, iMax=0;
for(int Index=0, iLen=0; strSource[Index]; Index++) { if(strSource[Index] >= '0' && strSource[Index] <= '9' && strSource[Index-1] > '0' && strSource[Index] == strSource[Index-1]+1) {
iLen++; // 连续数字的长度增1 } else { // 出现字符或不连续数字 if(iLen > iMax) {
iMax = iLen; iHead = iTmp; }
// 该字符是数字,但数字不连续
if(strSource[Index] >= '0' && strSource[Index] <= '9') { iTmp = Index;
iLen = 1;
} } }
for(iTmp=0 ; iTmp < iMax; iTmp++) // 将原字符串中最长的连续数字串赋值给结果串
strResult[iTmp] = strSource[iHead++]; strResult[iTmp]='\\0';
return iMax; // 返回连续数字的最大长度 }
14、实现strstr功能,即在父串中寻找子串首次出现的位置。(笔试中常让面试者实现标准库中的一些函数)
char * strstring(char *ParentString, char *SubString) { char *pSubString, *pPareString;
for(char *pTmp=ParentString; *pTmp; pTmp++) { pSubString = SubString; pPareString = pTmp;
while(*pSubString == *pPareString && *pSubString != '\\0') { pSubString++; pPareString++; }
if(*pSubString == '\\0') return pTmp; }
return NULL; }
16、2005年11月金山笔试题。编码完成下面的处理函数。函数将字符串中的字符'*'移到串的前部分,前面的非'*'字符后移,但不能改变非'*'字符的先后顺序,函数返回串中字符'*'的数量。如原始串为:ab**cd**e*12,处理后为*****abcde12,函数并返回值为5。(要求使用尽量少的时间和辅助空间)
int change(char *str) { /* 这个算法并不高效,从后向前搜索效率要高些 */
int count = 0; /* 记录串中字符'*'的个数 */ for(int i=0, j=0; str[i]; i++) { /* 重串首开始遍历 */ if(str[i]=='*') { /* 遇到字符'*' */
for(j=i-1; str[j]!='*'&&j>=0; j--) /* 采用类似插入排序的思想,将*前面 */
str[j+1]=str[j]; /* 的非*字符逐个后移,直到遇到*字符 */
str[j+1] = '*'; count++; } }
return count; }
int change(char *str) { int i,j=strlen(str)-1; for(i=j; j>=0; j--) { if(str[i]!='*') { i--;
} else if(str[j]!='*') { str[i] = str[j]; str[j] = '*'; i--; }
共分享92篇相关文档