概述
/*
假设需要将N个任务分配给N个工人同时去完成,每个人都能承担这N个任务,但费用不
同.下面的程序用回溯法计算总费用最小的一种工作分配方案,在该方案中,为每个人分配
1个不同的任务.
程序中,N个任务从0开始依次编号,N个工人也从0开始依次编号,主要的变量说明如下:
c[i][j]:将任务i分配给工人j的费用;
task[i]:值为0表示任务i未分配,值为j表示任务i分配给工人j;
worker[k]:值为0表示工人k未分配任务,值为1表示工人k已分配任务;
mincost:最小总费用.
*/
#include <stdio.h>
#include <stdlib.h>
#define N 8 //N表示任务数和工人数
int c[N][N];
unsigned int mincost = 65535; //设置的初始值,大于可能的费用
int task[N],temp[N],worker[N];
void Plan(int k,unsigned int cost){
int i;
if(k>=N && cost<mincost){
mincost = cost;
for(i=0;i<N;i++){
temp[i] = task[i];
}
}else{
for(i=0;i<N;i++){ //分配任务k
if(worker[i]==0 && cost+c[k][i]){
worker[i] = 1; task[k] = i;
Plan(k+1,cost+c[k][i]);
worker[i] = 0; task[k] = 0;
}
}
}
}来求出用1,2,5这三个数不同个数组合的和为1000的组合个数(华为面试题目)
即x+2y+5z=100,并且条件为x<=100,y<=50,z<=20
程序就如下:
int number=0;
3 void main()
4 {
5 int i,j,n=0;
6 for(i=0;i<=20;i++)
7 {
8 for(j=0;j<=(100-i*5)/2;j++)
9 {
10 n++;
11 }
12 }
用异或运算实现交换两个变量的值
void swap(int a , int b)
{
a = a^b;
b = a^b;
a = a^b;
}
Winsock建立套接字的步骤
服务器端:socket()建立套接字,绑定bind()并监听listen(),用accept()等待客户端连接.
客户端:socket()建立套接字,连接connect()服务器,连接上后使用send()和recv(),在套接字上读写数据,直至数据交换完毕,closesocket()关闭套按字.
服务器端:accept()发现有客户端连接,建立一个新的套接字,自身重新开始等待连接.该新产生的套接字使用send()和recv()读写数据,直至数据交换完毕,closesocket()关闭套接字.
MFC消息映射机制
消息映射就是建立一个消息和函数的对应表,当收到消息时查找表,如果表中有相应的消息,就将消息交给相应的函数处理。通俗点讲,消息映射表就是一个记录了消息号和相应处理函数的数组。当然表中还有其他信息,这里先说矛盾的主要方面了。其中消息映射表中的每个元素都是一个结构体变量,他的成员很多,最主要的就是消息号和相对应的消息处理函数。关于消息映射表的查找,是通过虚函数实现的,通过父类的虚函数查找父类及其层层子类定义的消息映射表。如果找不到,就交给默认的窗口处理函数处理。 如果一个类的消息映射表中定义了一个消息处理,那么就不再继续查找子类或者子类的子类,从而实现了覆盖。
进程间、线程间通信方式概括
- 博客分类:
- C++
进程间的通信方式:
1.管道(pipe)及有名管道(named pipe):
管道可用于具有亲缘关系的父子进程间的通信,有名管道除了具有管道所具有的功能外,它还允许无亲缘关系进程间的通信。
2.信号(signal):
信号是在软件层次上对中断机制的一种模拟,它是比较复杂的通信方式,用于通知进程有某事件发生,一个进程收到一个信号与处理器收到一个中断请求效果上可以说是一致的。
3.消息队列(message queue):
消息队列是消息的链接表,它克服了上两种通信方式中信号量有限的缺点,具有写权限得进程可以按照一定得规则向消息队列中添加新信息;对消息队列有读权限得进程则可以从消息队列中读取信息。
4.共享内存(shared memory):
可以说这是最有用的进程间通信方式。它使得多个进程可以访问同一块内存空间,不同进程可以及时看到对方进程中对共享内存中数据得更新。这种方式需要依靠某种同步操作,如互斥锁和信号量等。
5.信号量(semaphore):
主要作为进程之间及同一种进程的不同线程之间得同步和互斥手段。
6.套接字(socket);
这是一种更为一般得进程间通信机制,它可用于网络中不同机器之间的进程间通信,应用非常广泛。
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
线程之间的同步通信:
1.信号量 二进制信号量 互斥信号量 整数型信号量 记录型信号量
2.消息 消息队列 消息邮箱
3.事件event
- 请用标准C语言实现下列标准库函数,设计中不得使用其他库函数。
char *strstr(char *str1,char *str2);
在字符串str1中,寻找字串str2,若找到返回找到的位置,否则返回NULL
const char* StrStr(const char *str1, const char *str2) - {
- assert(NULL != str1 && NULL != str2);
- while(*str1 != '