学海无涯-18.7.17

fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不同,两个进程也可以做不同的事。

int number = 1;
if(fork() == 0)
    printf("%d", ++number);
printf("%d", --number);

在语句if(fork() == 0)之前,只有一个进程在执行代码,但在这条语句之时,就变成两个进程在执行了。

fork()调用的特殊之处就是它仅仅被调用一次,却能够返回两次,它可能有三种不同的返回值:

  1. 在父进程中,fork返回新创建子进程的进程ID;
  2. 在子进程中,fork返回0;
  3. 如果出现错误,fork返回一个负值;

所以该程序返回两个值:2, 0。

打劫房屋问题:假设你是一个专业的窃贼,准备沿着一条街打劫房屋,每个房子都存放着特定金额的钱,你面临的唯一约束条件是:相邻的房子装着相互联系的防盗系统,且当相邻的房子同一天被打劫时,该系统会自动报警,给定一个非负整数列表,表示每个房子中存放的钱,算一算,如果今晚去打劫,你最多可以得到多少钱,在不报警的情况下。(例如:给定{3, 8, 4},返回8。)

int Maxmoney();
int max();

int main(void)
{
    int i, n, money, a[n];
    printf("请输入房屋的总数:");
    scanf("%d\n", &n);
    printf("输入每个房屋的金钱:");
    for(i = 0; i < n; i++)
        scanf("%d", &a[i]);
    money = Maxmoney(n,a);
    printf("%d", money);

    return 0;
}

int Maxmoney(int n, int a[])
{
    int i, dp[n];
    dp[0] = a[0];
    dp[1] = max(a[0], a[1])
    for(i = 2; i < n; i++)
        dp[i] = max(dp[i-1], dp[i-2] + a[i]);
    return dp[n-1];
}

int max(int a, int b)
{
    if(a > b)
        return a;
    else
        return b;
}

猜你喜欢

转载自blog.csdn.net/huihuangxu94/article/details/81083807
今日推荐