篇中提及的问题的解答:
1、1到100之间的所有素数之和;
int i = 1;
int j = 0;
bool change= 1;
int sum = 0;
for (i=1; i<100; i++)
{
for (j=2; j
{
if(i%j==0)
{
change = 0;
break;
}
}
if(change==1)
sum +=i;
change = 1;
}
printf("%d\n",sum);
2、队列的实现;(用数组或者链表,定义好输入和输出即可)
3、选首领(有一群人围在一圈,从第一个人开始数1、2、3,数到3者退出,用循环链表实现)
n个人围成一圈,从第一个人开始依次从1到m循环报数,当报到m的时候此人出圈,直到圈 中只剩一人为止.求最后一个人的原始编号。
int yuesefu(int n,int m)
{
int i,r=0;
for (i=2;i<=n;i++) r=(r+m)%i;
return r+1;
}
4、字符串匹配问题(int countABC(* s) 输入任何一串字符串,计算机其中有连续ABC子字符 串的个数)
int countABC(* s)
{
int i = 0;
int j = 0;
int num = 0;
scanf("%s",s);
int len = strlen(s);
for (i=0; i www.deyou8.com哦
{
j = strcmp(s+i,"ABC");
if(j==0)
num++;
}
}
5、用数组存储超大数的问题。
这是数组得一个应用,思想是我们定义一个数组,让每一个元素得值都是从后到前以十 进制得方式存贮得,如过到了9下一位就要让前一个元素进位为1,9变为0同时。
下面这个例子是要求一个40位的 n!的值
int data[40];//存储40位书的整数数组
int digit;//数据位数变量
int i,j,r,k;
int n;//用户输入值
for(i=1; i<40+1; i++)
data[i]=0;
data[0]=data=1;
digit=1;
printf("enter a number :");
scanf("%d",n);
for(i=1; i
{
for(j=1; j
data[j]*=i;
for(j=1; j
{
if(data[j]>10)
{
for(r=1; r
{
if(data[digit]>10)//大于10时候位数加1
digit++;
data[r+1]+=data[r]/10;//进位增加
data[r]=data[r]%10;//去掉进位后得值
}
}
}
printf("%d! = ",i);
for(k =digit; k>0; k--) www.deyou8.com哦
printf("%d",data[k]);
printf("\n");
}
6、询问我操作系统的进程和线程的区别
进程和线程都是由操作系统所体会的程序运行的基本单元,系统利用该基本单元 实现系统对应用的并发性。进程和线程的区别,简而言之:
一个程序至少有一个进程,一个进程至少有一个线程.
线程的划分尺度小于进程,使得多线程程序的并发性高。
另外,进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大 地提高了程序的运行效率。
=========================================
1、ping命令使用的是哪种报文?
PING命令使用ICMP的哪种code类型:Echo reply(回显请求报文)
2、OSI分哪几个层,IP是在哪个层?
osi:物理层、链路层、网络层、传输层、会话层、管理层、应用层。
tcp/ip:主机网络层、互联层、传输层、应用层。ip是在互联层
3、哈希表的问题
主要用于快速查找检索方面
4、为什么要采取二叉树这种数据结构?
他折半查找,可以减少查找比较次数
5、五元组
二元组的定义:
三元组的定义:
五元组的定义:
V是值的集合,O是操作的集合,G是构成名字的文法,M是存储的集合,S是从G能构成的名字 几个到M的映射.
iP报文中的五元组(即源IP地址,源端口号,目的IP地址,目的端口,协议)。
半相关
综上所述,网络中用一个三元组可以在全局唯一标志一个进程:
(协议,本地地址,本地端口号)
这样一个三元组,叫做一个半相关(half-association),它指定连接的每半部分。