2017阿里研发工程师C/C++实习生招聘笔试题

【1】做股票的人总会忍不住幻想:如果知道明天怎样就好了。那么问题来了,如果打开上帝视角,你最好能做到怎样?
真实世界的股票交易规则太复杂,我们这里做一些简化。首先我们假设有N个股票和M个交易期。
可以认为在单个交易期内所有股票的价格都是恒定的。股票卖出需要缴纳交易额的P倍的印花税。股票可以零碎地买卖,即,你买个0.01股也是可以的。
我们这个市场里没有停牌,没有休市,没有涨停跌停,没有买空卖空,没有分红,而且股票价格也不会跌到零。

举个例子,假设你用手里的一元钱买了个股票。这个股票第一期价格1元/股,你买入之后手上有1股股票和0元现金。
这个股票在第二期涨到2元/股,那么你这时卖出1股就获得了2元(税前),扣除10%的印花税,你手上没有股票却有1.8元现金。

如果你在一开始有1元现金,在M个交易期之后,你最多能持有多少现金?

编程说明:
编译器版本: gcc 4.8.4
请使用标准输入输出(stdin,stdout) ;请把所有程序写在一个文件里,勿使用已禁用图形、文件、网络、系统相关的头文件和操作,如sys/stat.h , unistd.h , curl/curl.h , process.h

时间限制: 1S (C/C++以外的语言为: 3 S)
内存限制: 64M (C/C++以外的语言为: 576 M)

输入:
第一行是两个正整数N和M以及一个浮点数P。随后是M行,每行N个浮点数,代码某期(行)内某股票(列)的价格。

输出:
M期后你持有的现金,一个精确到小数点后一位的浮点数。

输入范例:
1 2 0.1
1
2

输出范例:
1.8

#include 
#include
#include //包含动态内存分配函数。

int main(void)
{
int N,M,i,*p;
float P,out,num;
printf("输入N M P:\n");
scanf("%d%d%f",&N,&M,&P);
p = (int *)malloc(sizeof(int *) *N*M);//申请指针空间。
for(i = 0; i < M*N; i++)
{
  scanf("%d",&p[i]);
}


for(i = 0;i < N; i++)
{
  num = 1/float(p[i]);
  out = num * p[i+N*(M-1)] * (1-P); 
  printf("%.1f ",out);
}
printf("\n");
free(p);
system("pause");
return 0;
}


你可能感兴趣的:(c)