首页 > 代码库 > 百度在线考试编程题:股神小赛
百度在线考试编程题:股神小赛
小赛买股票了,本金为1元,第1天过后不变还是1元,从第二天开始涨1天跌1天,涨2天跌1天,涨3天跌1天,涨4天跌1天,……每次涨幅或跌幅都是1元,求第n天他还有多少钱(大致描述了下题目,具体我也不知道了)
自己比较笨的方法做的,相对高手来说代码量比较大(水平太low,大家见谅)。代码如下:
1 /*********计算股价*********/ 2 /*********根据规律,将天数分成段数,计算股价和*********/ 3 #include <stdio.h> 4 #define Base 1 5 6 int days_section(int); 7 int judge_sec(int); 8 int sum_money_section(int); 9 int sum_money_total(int);10 11 int main(void)12 {13 int days;14 printf("Please enter days:\n");15 while (scanf("%d", &days) == 1)16 {17 printf("money: %d\n\n",sum_money_total(days));18 printf("Please enter another days(q to qiut):\n");19 }20 }21 22 /****************计算前n段的总天数:输入段数,输出天数*******************/23 int days_section(int n) //第1段2天;第2段2+3天;第3段2+3+4天;……24 {25 int i,num=0;26 for(i=1; i<=n; i++)27 num+=(i+2-1);28 return num;29 }30 31 /*****************判断一个天数days对应的段数*******************/32 int judge_sec(int n) //前5段共20天,则第21天属于第6段33 {34 int i;35 for(i=1; days_section(i)<=n; i++);36 return i;37 }38 39 /********************计算前n段区间的股价改变值********************/40 int sum_money_section(int n)//前1段1+(0)¥,前2段1+(0+1)¥,前3段1+(0+1+2)¥,前4段1+(0+1+2+3)¥……41 {42 int i,sum=0;43 for(i=1; i<=n; i++)44 sum += (i-1);45 return sum+1;46 }47 48 /********************计算总股价********************/49 int sum_money_total(int days)50 {51 int sections, days_sec, days_left, money;52 53 if(days == 0 || days == 1)54 money = Base + 0; //第零天或第一天无变化,即增长为055 else56 {57 58 sections = judge_sec(days) - 1; //多少段59 days_sec = days_section(sections); //(这多少段是多少天)60 days_left = days - days_sec; //余几天61 62 if(days_left == 0 || days_left == 2)63 money = sum_money_section(sections) + Base; //当余下的天数为0或者2时,总价=多少段的钱+本金(余0天和余2天都是不亏不赚)64 else if(days_left == 1)65 money = sum_money_section(sections) - 1 + Base; //当余下的天数为1时,总价=多少段的钱+本金-1(余1天的算亏一元)66 else 67 money = sum_money_section(sections) + (days_left-2) * 1 + Base; //当余下的天数大于2时,总价=多段的钱+本金+(余的天数-2)*168 69 }70 return money;71 }
我就是找规律,然后分成整段和一个余数,其中每段都是以跌的那一天开始的,到下一次跌之前结束。总价 = 整段的钱(这个比较好算,公差为1的等差数列和) + 余数的钱(分三种情况计算下就行)。
有时间的话这题还得参考参考高手的代码,好像很简洁。
(PS:这题完全是自己想的,做出来之后再看了看别人的做法。似乎体会到了“程序员很重要的能力之一就是把问题抽象化”这句话的含义了,加油!!)
百度在线考试编程题:股神小赛
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。