某人决定用9万元投资a、b、c、d四支股票,已知购买时四支股票股价分别为每股10元,15元,30元,90元,四只股票的预期年收益率分别为1.5元,2元,5元和3元每股,如果希望持有股票数量不超过8000股,为了使得年收益达到最大,请为他设计算法进行规划购买方案,并给出最大预期年收益。
时间: 2023-03-16 15:50:19 浏览: 124
根据题目,某人决定用9万元投资a、b、c、d四支股票,已知购买时四支股票股价分别为每股10元,15元,30元,90元,四只股票的预期年收益率分别为1.5元,2元,5元和3元每股。为了使得年收益达到最大,需要设计算法进行规划购买方案,并给出最大预期年收益。
首先,我们可以计算出每支股票的预期年收益率与股价的比值,即a股票为0.15,b股票为0.1333,c股票为0.1667,d股票为0.0333。
然后,我们可以按照比值从大到小的顺序购买股票,直到持有股票数量达到8000股为止。具体的购买方案如下:
1. 先购买c股票,购买数量为8000股,花费为240000元,预期年收益为8000*0.1667*30=39996元。
2. 再购买b股票,购买数量为533股,花费为7995元,预期年收益为533*2=1066元。
3. 最后购买a股票,购买数量为471股,花费为4710元,预期年收益为471*1.5=706.5元。
由此可得,最大预期年收益为39996+1066+706.5=41768.5元。
因此,某人应该按照上述购买方案进行投资,才能使得年收益达到最大。
相关问题
用c语言实现四则运算表达式建立二叉树并对其进行遍历已知算术表达式为a+b*(c-d)-e/f
可以使用递归的方式来实现建立二叉树和对其进行遍历。具体步骤如下:
1. 定义二叉树结构体。
```c
typedef struct TreeNode {
char data;
struct TreeNode* left;
struct TreeNode* right;
} TreeNode;
```
2. 定义建立二叉树的函数。
```c
// 建立二叉树
TreeNode* buildTree(char* expression, int start, int end) {
if (start > end) {
return NULL;
}
// 找到当前表达式中优先级最低的运算符
int minPriority = INT_MAX;
int minIndex = -1;
int priority = 0;
for (int i = start; i <= end; i++) {
if (expression[i] == '(') {
priority += 10;
} else if (expression[i] == ')') {
priority -= 10;
} else if (expression[i] == '+' || expression[i] == '-') {
if (priority < minPriority) {
minPriority = priority;
minIndex = i;
}
} else if (expression[i] == '*' || expression[i] == '/') {
if (priority + 1 < minPriority) {
minPriority = priority + 1;
minIndex = i;
}
}
}
// 如果当前表达式中没有运算符,则返回一个叶子节点
if (minIndex == -1) {
TreeNode* node = (TreeNode*)malloc(sizeof(TreeNode));
node->data = expression[start];
node->left = NULL;
node->right = NULL;
return node;
}
// 构造当前节点
TreeNode* node = (TreeNode*)malloc(sizeof(TreeNode));
node->data = expression[minIndex];
node->left = buildTree(expression, start, minIndex - 1);
node->right = buildTree(expression, minIndex + 1, end);
return node;
}
```
3. 定义二叉树的前序遍历函数。
```c
// 前序遍历二叉树
void preOrder(TreeNode* root) {
if (root == NULL) {
return;
}
printf("%c ", root->data);
preOrder(root->left);
preOrder(root->right);
}
```
4. 定义二叉树的中序遍历函数。
```c
// 中序遍历二叉树
void inOrder(TreeNode* root) {
if (root == NULL) {
return;
}
inOrder(root->left);
printf("%c ", root->data);
inOrder(root->right);
}
```
5. 定义二叉树的后序遍历函数。
```c
// 后序遍历二叉树
void postOrder(TreeNode* root) {
if (root == NULL) {
return;
}
postOrder(root->left);
postOrder(root->right);
printf("%c ", root->data);
}
```
6. 将上述函数整合到一个主函数中。
```c
int main() {
char expression[] = "a+b*(c-d)-e/f";
TreeNode* root = buildTree(expression, 0, strlen(expression) - 1);
printf("前序遍历结果:");
preOrder(root);
printf("\n");
printf("中序遍历结果:");
inOrder(root);
printf("\n");
printf("后序遍历结果:");
postOrder(root);
printf("\n");
return 0;
}
```
最终的输出结果为:
```
前序遍历结果:-+a*b-c/ef
中序遍历结果:a+b*c-d-e/f
后序遍历结果:abc*d-+ef/-
```
已知字符A、B、C、D的使用频率分别为22、7、9、27。下列编码属于Huffman编码的是
首先,Huffman编码的基本思想是将出现频率较高的字符用较短的编码,出现频率较低的字符用较长的编码,以此来提高编码的压缩率。因此,我们需要先按照字符的使用频率构建Huffman树,然后根据Huffman树来确定每个字符的编码。
按照使用频率从小到大的顺序依次将四个字符放到Huffman树中:
```
B(7) C(9) A(22) D(27)
\ / / \
\ / / \
BC(16) A(22) D(27)
\ / /
\ / /
BCA(25) D(27)
\ /
\ /
BCAD(52)
```
从上面的Huffman树中可以看出,B的编码为"10",C的编码为"11",A的编码为"0",D的编码为"1",因此,下列编码属于Huffman编码的是:
```
A: 0
B: 10
C: 11
D: 1
```
因为每个字符的编码都不是另一个字符编码的前缀,所以这是一个合法的Huffman编码。