目录
110. 同一个IP同一个端口可以同时建立tcp和udp的连接吗
112. 假如已知有n个人和m对好友关系(存于数字r)。如 果两个人是直接或间接的好友(好友的好友的好友…),则 认为他们属于同一个朋友圈,请写程序求岀这n个人里一共 有多少个朋友圈。
113. 请问如何保证単例模式只有唯一实例?你知道的都有哪些方法?
118. 我们在将某个订单送给某一司机之前,需要计算一下这 个司机选择接受这个订单的概率,现有A,B两个订单,对某 一司机。已知;
101. 分现在有10个人被一个魔鬼逮住了。魔鬼对于直接把人 杀掉的方法不感兴趣了。于是,他就想了一个杀人的新花样。 是这样的,一天晚上,魔鬼向着十个人宣布了游戏规则,即 明天早上他要把10个人排成一排,然后从一堆既有无限多 的白帽子混着无限多黑帽子的帽子堆为每个人随机抽取一 顶帽子,给他们10个人都戴上帽子。因为10个人是排成一 排的,所以排在第10个的人可以看到前面9个人帽子的颜 色,排在第9个人可以看到前面8个人的帽子的颜色,…以 此类推。然后,魔鬼会从排在第10个人开始,问他,你头 上的帽子的颜色是白色还是黑色,如果答对了,就放他走; 如果答错了,就被杀掉。然后同样问排在第9位的人,然后 问排在第8位的人,.…以此类推。在这其中,10个人所能做 的只有当他被魔鬼问到的时候,答白色或者黑色。不能有超 越此范围的任何行动,不然,魔鬼会把它们10个人全部杀 死。
现在魔鬼给他们10个人一晚上的时间去商量一个对策,使 得他们中能存活下来的人越多越好。请问,你会有什么样的 对策,请计算出按照你的对策执行时最坏的情况下,他们中 能有多少人能100%够活下来?期望能活下来的人数又是多 少?
大家约定白代表偶,黑代表奇,则第10个人的回答是前9个帽子中白帽的数量的奇偶。 他自己有50%的机会。-第9个人听到他的回答后,结合他看到的8顶帽子中白帽的奇 偶,可以知道自己的帽子的颜色,如实作答。第8个人知道9顶帽子中白帽的奇偶,加 上听到第9顶帽子的颜-色,就可以知道前8顶帽子中白帽的奇偶(如果第9个人答白, 则前8顶中的白帽奇偶性与第第10个人所说的相反;如果第9个人答黑,则相同),再 结合所看到前7顶-帽子中的白帽数量,也可以推出自己的帽子颜色,也如实作答。依 此类推,前9个人都可以活下来,第1个人有一半机会。
102. 遍历输入流,将符号和数字分开存到两个数组里,减号作为数字的负数。然后在符号集里面找*或者/,找到就把对应的数组集两个操作数比较并排序。
然后数组被分割成三段,中间是乘法和两个交换数,两边是没有操作的数据,然后分别对两边做递归。
如果没有找到*或者/说明全是加法,直接对数组的数据进行 排序。
#include <iostrearn〉
#include 〈vector〉
#include〈math. h>
using namespace std;
/林
1 + 2 + 1+-4 *-5 + 1
1 + 1 + 2 +-5 *-4 + 1
*/
int data[100];
char fuhao L100J;
/林
*快排序
* ©param a
* ©param low
* ©param high
*/
void quicksort (int af], int low , in,: high)
if (low<high)
[
int i = low, j = high;
int x = a[low];
while(i〈j)
[
while(i<j && a[j] >= x) j—; if(i<j) a[i++] = a[j];
while(i<j && a[i] <= x) i++; if(i<j) a[j—] = a[i];
a[i] = x;
quicksort (a, low , i-l); quicksort (a, i+1 , high);
void my Sort (int data[], char fuhao int begin, int end) { for (int i = begin; i < end; ++^) {
if (fuhao [i] == W | | fuhao [i] == ' /') {
//先对乘除两边进行排序
if (data[i] > data[i+1];{
int temp = data[i];
data[i] = data[i+1].
data[i+1] = temp;
my Sort (data, fuhao, begin, i-l); my Sort (data: fuhao, i+2, end); return;
//没有乘除号,就对-的数字进行排序 quicksort (data, begin, end);
int main。{
int n = -1;
char temp;
int size__data = 0;
int size__fuhao - 0;
getchax ();
scanf("%c”, &temp);
int num - 0; bool munes = false;
while (temp != 9 \n ){
if (temp == ' +' I I temp //添加数字 if (munes){
=* || g =='/'){
num = "num;
data [size__data++] num = 0;
munes - false;
num
//添加符号
fuhao[s i z e_fuhao++]
else if (temp >= ‘0’ &&
num - num*10 + temp - ‘0’ ; } else if (temp == ',) {
//谒见负号
munes = true
temp <= ‘96
temp;
scanf(”%c”, &temp);
data[size__data++] - num;
my Sort (data, fuhao, 0, size_data"l);
for (int i = 0; printf ("%d”, data[i]); printf (°%cfuhao [i]);
i < size_data - 1; ++i) {
cout<< data[size_data"l]; return 0;
103.求最长回文子串的长度
#include <string・ h>
#include <iostream>
#include 〈algorithm〉
using namespace std;
int get_longest_palindromic(string s) {
int len = s. size ();
s. resize (2 * len + 1); // 重S string 的长度
for (int i = 2 * len; i >= 0; i—) {
if (i % 2 == 0)s[i]=,.;
else s[i] = s[i / 2];
}
len = s. size ();
int mv = 1;
for (int i = 0; i < len; i++){
int 1 = i - 1, r = i + 1;
int ent = 1;
while(1 >= 0 && r <= len){
if (s[l—] == s [r++]) ent X 2;
else break;
}
mv = max (mv, ent);
}
return mv » 1; // 要除 2
}
int main() {
string s;
string end = 〃END";
int len = s. size ();
int num - 1;
while(cin >> s && s・compare(end;) {
cout « "Case " « num++ « << get_longest_palindromic(s) « endl;
}
return 0;
1
104.给定无序整数序列,求连续子串最大和。
package coding;
import java. util. *;
public class Main {
public static void main(String[. args) {
Scanner in = new Scanner(System, in);
String nextLine = in. nextLine();
String[] splits = nextLine. split
ArrayList<Integer> A = new ArrayList<Integer> (); for (int i = 0; i < splits.length; i++) {
A. add(integer, parselnt (splits[i]));
if(A==nullI I A. size()==0) return ;
ArrayList<Integer> result = new ArrayList<Integer> (); result, add(-l);
result, add(-l);
int min = 0;
int max = Integer. MIN_VALUE;
int minpos = ~1;
int sum = 0;
for(int i = 0;i<A.size();i-+) (
sum += A. get (i);
if(sum - min > max){
result, set(0 , minpos);
max = sum - min;
result.set (1 , i);
}
if(sum < min){
min = sum;
minpos = i;
}
}
int temp = result, get(0);
result, set(0 , temp + 1);
int re - 0;
for(int i = result, get(0); i <= result.get(1); i ++){ re x A. get(i);
System, out. printIn(max);
105.给定无序整数序列,求其中第K大的数。
package cn. thinkingl?;
import java. io. *;
import java. util. *;
public class NOK {
public static void main(String args[])
{
Scanner in = new Scanner(System, in);
String nextLine = in. nextLine();
int kth = in. nextlnt ();
String[] splits = nextLine. split“); int[] numbers = new int [splits, length];
for (int i = 0; i < numbers, length; i++) { numbers[i] = Integer.parselnt(splits[i]);
System, out. printIn(kthLargestElement (2, numbers));
public static int kthLargestElenent(int k, int[] nums) { if (nums == null || nums.length == 0) {
return 0;
if (k <= 0){
return 0;
return helper (nums, 0, nums.