百度在线考试编程题:股神小赛

小赛买股票了,本金为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;    //第零天或第一天无变化,即增长为0
55     else
56     {
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)*1
68
69     }
70     return money;
71 }

我就是找规律,然后分成整段和一个余数,其中每段都是以跌的那一天开始的,到下一次跌之前结束。总价 =  整段的钱(这个比较好算,公差为1的等差数列和)  +   余数的钱(分三种情况计算下就行)。

有时间的话这题还得参考参考高手的代码,好像很简洁。

(PS:这题完全是自己想的,做出来之后再看了看别人的做法。似乎体会到了“程序员很重要的能力之一就是把问题抽象化”这句话的含义了,加油!!)

时间: 2024-12-04 11:22:13

百度在线考试编程题:股神小赛的相关文章

中国MOOC_面向对象程序设计——Java语言_期末考试编程题_1细胞自动机

期末考试编程题 返回 这是期末考试的编程题 温馨提示: 1.本次考试属于Online Judge题目,提交后由系统即时判分. 2.学生可以在考试截止时间之前提交答案,系统将取其中的最高分作为最终成绩. 1 细胞自动机(30分) 题目内容: 这是细胞自动机的非图形版本.细胞自动机是指在一个二维网格内,每一个网格是一个细胞.每个细胞有活和死两种状态. 初始时刻,有些细胞是活的,有些细胞是死的.自动机的每一步,根据每个细胞周围8个格子内的其他细胞的生存情况决定这个细胞下一步是否存活.具体的规则如下:

股神小L 2016Vijos省选集训 day1

股神小L (stock.c/pas/cpp)============================ 小L厌倦了算法竞赛,希望到股市里一展身手.他凭借自己还行的计算机功底和可以的智商,成功建立一个模型预测了一支股票接下来n天的价格. 我们把这支股票第i天的价格称为a_i.在接下来n天里,每一天小L可以选择花费a_i买入一股或者卖出一股从而获得a_i元收入. 当然小L卖出股票的时候,自己的账户上必须要有至少一股的剩余.现在小L希望知道,在n天过去之后,采取最优策略的情况下自己最多赚到多少钱. 注意

期末考试——编程题#2:能被3,5,7整除的数

编程题#2:能被3,5,7整除的数 来源: POJ(Coursera声明:在POJ上完成的习题将不会计入Coursera的最后成绩.) 注意: 总时间限制: 1000ms 内存限制: 65536kB 描述 输入一个整数,判断它能否被3,5,7整除,并输出以下信息: 1.能同时被3,5,7整除(直接输出3 5 7,每个数中间一个空格): 2.能被其中两个数整除(输出两个数,小的在前,大的在后.例如:3 5或者 3 7或者5 7,中间用空格分隔) 3.能被其中一个数整除(输出这个除数) 4.不能被任

jQuyer模拟在线考试做题

<!DOCTYPE html> <html><head> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <title>在线考试</title> <meta name="Keywords" content=""> <meta name="De

百度在线笔试编程第三题-比大小

Problem Description: 现在有"abcdefghijkl”12个字符,将其所有的排列中按字典序排列,给出任意一种排列,说出这个排列在所有的排列中是第几小的? 输入: 第一行有一个整数n(0<n<=10000); 随后有n行,每行是一个排列: 输出: 输出一个整数m,占一行,m表示排列是第几位 样例输入: 3 abcdefghijkl hgebkflacdji gfkedhjblcia 样例输出: 1 302715242 260726926

RH124 考试真题讲解(小部分、不全)

考试时间2.5小时 请首先按以下要求配置考试系统: HostName server0.example.com ip add :172.25.0.11 netmask:/24 gateway:172.25.254.254 Name server 172.25.254.254 所有配置要求系统重启后仍然生效 [[email protected] Desktop]# hostnamectl set-hostname server0.example.com [[email protected] Desk

期末考试——编程题#5:字符串插入

来源: POJ(Coursera声明:在POJ上完成的习题将不会计入Coursera的最后成绩.) 注意: 总时间限制: 1000ms 内存限制: 65536kB. 描述 有两个字符串str和substr,str的字符个数不超过10,substr的字符个数为3.(字符个数不包括字符串结尾处的'\0'.)将substr插入到str中ASCII码最大的那个字符后面,若有多个最大则只考虑第一个. 输入 输入包括若干行,每一行为一组测试数据,格式为 str substr 输出 对于每一组测试数据,输出插

百度在线笔试编程测试题(Python):整数分解成素数的积

编程测试题: 输入一个正整数将其分解成素数的乘积,输入格式连续输入m个数,然后将这m个数分别分解,如 输入: 2 10 20 输出: 2 5 2 2 5 Python code: def primes(n): primfac = [] d = 2 while d*d <= n: while (n % d) == 0: primfac.append(d) n //= d d += 1 if n > 1: primfac.append(n) return primfac s = int(raw_i

[编程题] 独立的小易 网易2018

小易为了向他的父母表现他已经长大独立了,他决定搬出去自己居住一段时间.一个人生活增加了许多花费: 小易每天必须吃一个水果并且需要每天支付x元的房屋租金.当前小易手中已经有f个水果和d元钱,小易也能去商店购买一些水果,商店每个水果售卖p元.小易为了表现他独立生活的能力,希望能独立生活的时间越长越好,小易希望你来帮他计算一下他最多能独立生活多少天. 输入描述: 输入包括一行,四个整数x, f, d, p(1 ≤ x,f,d,p ≤ 2 * 10^9),以空格分割 输出描述: 输出一个整数, 表示小易