面试题答案
面试题1:给定一个字符串,输出第一个只出现一次的字符。
1 #include <stdio.h> 2 3 int main(int argc, char *argv) 4 { 5 //output the first character which appears only once 6 int count[255] = {0}; 7 int order[255] = {0}; 8 int k = 0; 9 int i; 10 char str[] = "abcasb2sdakdl1"; 11 char *p = str; 12 while(*p) 13 { 14 if(count[*p] == 0) 15 { 16 order[k++] = *p; 17 } 18 count[*p++] += 1; 19 } 20 21 for(i = 0; i < k; i++) 22 { 23 if(count[order[i]] == 1) 24 { 25 printf("%c\n", order[i]); 26 break; 27 } 28 } 29 30 return 0; 31 }
题目二:给定一个整型数组,有正数或者负数,求其中子数组(1个或者连续多个数字组成)和的最大值 1 #include <stdio.h> 2 3 int maxSum(int a[], int len) 4 {//假设Si表示a0+...ai, 则遍历整个数组,得到S0,...Sn, 用最大的减去最小的即为子数组最大和 5 int min = 0; 6 int max = a[0]; 7 int sum = a[0]; 8 int i; 9 for(i = 1; i < len; i++) 10 { 11 sum += a[i]; 12 if(sum < min) 13 { 14 min = sum; 15 } 16 17 if(sum > max) 18 { 19 max = sum; 20 } 21 } 22 return max - min; 23 } 24 25 int main(int argc, char *argv[]) 26 { 27 int a[] = {1, -2, 3, 10, -4, 7, 2, -5}; 28 printf("%d\n", maxSum(a, 8)); 29 30 return 0; 31 }
1.有两个房间,一间房里有三盏灯,另一间房有控制着三盏灯的三个开关,
这两个房间是 分割开的,从一间里不能看到另一间的情况。
现在要求受训者分别进这两房间一次,然后判断出这三盏灯分别是由哪个开关控制的。
有什么办法呢?
(前提:灯首先全部关闭的)
打开开关A 5分钟关闭,打开B 1分钟关闭, 然后打开C。
开着的灯对应C,其余2盏灯,温度高的对应A。
2.你让一些人为你工作了七天,你要用一根金条作为报酬。金条被分成七小块,每天给出一块。
如果你只能将金条切割两次,你怎样分给这些工人?
(若每天平均给1/7)
则切割成1/7, 2/7, 4/7
前提时工人不能提前花了,要用来找零