现在的位置: 首页 > 综合 > 正文

面试题答案

2013年02月14日 ⁄ 综合 ⁄ 共 1082字 ⁄ 字号 评论关闭

面试题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

前提时工人不能提前花了,要用来找零

抱歉!评论已关闭.