一道关于树的数组题。。。

题目有点长,直接给图片了。。。
一道关于树的数组题。。。
有兴趣的可以自己先尝试一下,

这道题感觉很像给了一年之中的第n天,让你求这天是第几个月的第几天。。。笔者以后可能会做一下,那么现在来看一下这道题吧,
笔者并不是按照提示上的方法做的,看的并不是很懂。。。
展示我的思路了
一道关于树的数组题。。。
下面是代码,结合代码比较容易讲清楚

#include<stdio.h>
int main()
{int b[19]={0,28,30,25,20,35,50,20,25,36,33,27,27,28,28,29,30,33,26};
 int a[19]={0,28,30,25,20,35,50,20,25,36,33,27,27,28,28,29,30,33,26},i,k=0,j,n;
 printf("请输入数目的原始序号:\n");
 scanf("%d",&n);
 i=n;
 for(j=0;n>0;j++)
 {k=0;
  for(i=n;(b[j]>0)&&(i>0);i--,b[j]--)
    {
     k++;
    }
	n=n-a[j];
  }
  printf("第%d 位员工管理的第%d棵树\n",j-1,k);
  return 0;
}

好的,让我大致说一下思路,首先,让我们输入一个符合题意的整数,这个值存在了变量n里,下一步把n的值赋予i,因为用到了循环嵌套,内循环的i需要每次赋予新值,这个值就是还未分配的树。

也就是说我有一堆树,从员工1号开始分配树,当一个员工已经领满树而树还有剩余时,跳出里面的循环,接着为下一个员工发树,这个在代码里的体现就是j++;

而如果树分配完了,也就是内循环里的i=0时,跳出循环,此时的j为员工的号数,但是当到外循环时,j又加了1,所以最后需要减一,
k的作用是用来记录该树是某员工的第几棵,因此每次内循环结束时需要归零。
**
需要注意的一点就是n,内循环结束后的语句是n=n-a【j】而不是n=n-b【j】是因为b【j】已经改变了,不再是一开始的值了,所以需要利用a数组,当然也可以在内循环之前加个变量储存b【j】的值,总之需要注意,此时不能直接减去b【j】就好。
那么就是这样了。。。