部分IT公司笔试算法题
12-17 15:54:39
来源:http://www.qz26.com 笔试题目 阅读:8838次
导读:#define M 5int k, Found, Flag[N];int Stamp[M] = {0, 1, 4, 12, 21};// 在剩余张数n中组合出面值和Valueint Combine(int n, int Value) {if(n >= 0 && Value == 0) {Found = 1;int Sum = 0;for(int i=0; i Sum += Stamp[Flag];printf("%d ", Stamp[Flag]);}printf("\tSum=%d\n\n", Sum);}else for(int i=1; i0; i++)if(Value-Stamp >= 0) {Flag[k++] = i;Combine(n-1, Value-Stamp);Flag[--k] = 0;}return Found;}int main(int argc, char* argv[]) {for(int i=1; Combine(N, i)
部分IT公司笔试算法题,标签:银行笔试题目,企业笔试题目,http://www.qz26.com
#define M 5
int k, Found, Flag[N];
int Stamp[M] = {0, 1, 4, 12, 21};
// 在剩余张数n中组合出面值和Value
int Combine(int n, int Value) {
if(n >= 0 && Value == 0) {
Found = 1;
int Sum = 0;
for(int i=0; i
Sum += Stamp[Flag];
printf("%d ", Stamp[Flag]);
}
printf("\tSum=%d\n\n", Sum);
}else for(int i=1; i0; i++)
if(Value-Stamp >= 0) {
Flag[k++] = i;
Combine(n-1, Value-Stamp);
Flag[--k] = 0;
}
return Found;
}
int main(int argc, char* argv[]) {
for(int i=1; Combine(N, i); i++, Found=0);
}
10、大整数数相乘的问题。(这是20xx年在一考研班上遇到的算法题)
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 != '0') {
for(int In=0, j=LenA-1; j>=0; j--) {
TMP = (C[Index]-'0') + (A[j]-'0') * (B - '0') + In;
C[Index--] = TMP % 10 + '0';
In = TMP / 10;
}
C[Index] = In + '0';
}
}
}
int main(int argc, char* argv[]) {
char A[] = "21839244444444448880088888889";
char B[] = "38888888888899999999999999988";
char C[sizeof(A) + sizeof(B) - 1];
for(int k=0; k
C[k] = '0';
C[sizeof(C)-1] = '\0';
Multiple(A, B, C);
for(int i=0; C != '\0'; i++)
printf("%c", C);
}
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; // 返回连续数字的最大长度
}
int main(int argc, char* argv[]) {
char strSource[]="ads3sl456789DF3456ld345AA", char strResult[sizeof(strSource)];
printf("Len=%d, strResult=%s \nstrSource=%s\n",
GetSubString(strSource, strResult), strResult, strSource);
}
12、四个工人,四个任务,每个人做不同的任务需要的时间不同,求任务分配的最优方案。(20xx年5月29日全国计算机软件资格水平考试——软件设计师的算法题)。
#define M 5
int k, Found, Flag[N];
int Stamp[M] = {0, 1, 4, 12, 21};
// 在剩余张数n中组合出面值和Value
int Combine(int n, int Value) {
if(n >= 0 && Value == 0) {
Found = 1;
int Sum = 0;
for(int i=0; i
Sum += Stamp[Flag];
printf("%d ", Stamp[Flag]);
}
printf("\tSum=%d\n\n", Sum);
}else for(int i=1; i0; i++)
if(Value-Stamp >= 0) {
Flag[k++] = i;
Combine(n-1, Value-Stamp);
Flag[--k] = 0;
}
return Found;
}
int main(int argc, char* argv[]) {
for(int i=1; Combine(N, i); i++, Found=0);
}
10、大整数数相乘的问题。(这是20xx年在一考研班上遇到的算法题)
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 != '0') {
for(int In=0, j=LenA-1; j>=0; j--) {
TMP = (C[Index]-'0') + (A[j]-'0') * (B - '0') + In;
C[Index--] = TMP % 10 + '0';
In = TMP / 10;
}
C[Index] = In + '0';
}
}
}
int main(int argc, char* argv[]) {
char A[] = "21839244444444448880088888889";
char B[] = "38888888888899999999999999988";
char C[sizeof(A) + sizeof(B) - 1];
for(int k=0; k
C[k] = '0';
C[sizeof(C)-1] = '\0';
Multiple(A, B, C);
for(int i=0; C != '\0'; i++)
printf("%c", C);
}
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; // 返回连续数字的最大长度
}
int main(int argc, char* argv[]) {
char strSource[]="ads3sl456789DF3456ld345AA", char strResult[sizeof(strSource)];
printf("Len=%d, strResult=%s \nstrSource=%s\n",
GetSubString(strSource, strResult), strResult, strSource);
}
12、四个工人,四个任务,每个人做不同的任务需要的时间不同,求任务分配的最优方案。(20xx年5月29日全国计算机软件资格水平考试——软件设计师的算法题)。
上一页 [1] [2] [3] [4] [5] [6] [7] [8] 下一页
Tag:笔试题目,银行笔试题目,企业笔试题目,求职笔试面试 - 笔试题目
下一条:IT公司笔试常考的算法题