面试题答案
面试题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
前提时工人不能提前花了,要用来找零
浙公网安备 33010602011771号