赛码编程练习

股神

题目描述

有股神吗?有,小赛就是!经过严密的计算,小赛买了一支股票,他知道从他买股票的那天开始,股票会有以下变化:第一天不变,以后涨一天,跌一天,涨两天,跌一天,涨三天,跌一天...依此类推。为方便计算,假设每次涨和跌皆为1,股票初始单价也为1,请计算买股票的第n天每股股票值多少钱?

输入:

输入包括多组数据;

每行输入一个n,1<=n<=10^9 。

输出:

请输出他每股股票多少钱,对于每组数据,输出一行。

我的思路:

首先看到这种序列问题,第一想到的就是暴力破解,用一个数组存储所有的数据,这样做可以解决数据量较少的情况

 1 int a[10000];
 2     a[1] = 1;
 3     int flag = 1;
 4     int temp = 1;
 5     for (int k = 2; k<10000; k++){
 6         if (flag>0){ a[k] = a[k - 1] + 1; }
 7         if (flag == 0){ a[k] = a[k - 1] - 1; }
 8         flag--;
 9         if (flag < 0){
10             temp = temp + 1;
11             flag = temp;
12         }
13     }

上述代码就是简单的遍历,k是n的大小,当我的k过大时程序崩溃,解决不了10e9的情况,所以这个题没法用这个思路解决。怎么办,我考虑到给定n时,我们可以根据它之前下跌过几天和它在最后一次下跌后上涨了几天,我最开始考虑到的是等差数列求和公式,假设没有下跌的情况 s=n+n(n-1)/2,求出这个n就是k天一共有n天下跌了。举个例子 3=2+2*(2-1),第三天经历一次下跌,n=2,股价变为k-2*(n-1)=1;第4天和第5天的情况和第3天一样,而第六天6=3+3*(3-1);n=3,股价变为k-2*(n-1)=2;这样可以看到s=n+n(n-1)/2和s<n+1+(n+1)*n的情况都是股价下跌n-1天。

#include "stdafx.h"
#include<stdio.h>
#include <iostream>
using namespace std;
int main()
{
    int n;
    while (cin>>n){
        int i;
        for (i = 1; i <= n; i++){
            int s;
            s = i + i*(i - 1) / 2;
            if (s == n){  break; }
            if (s > n){ i = i - 1; break; }
        }
        if (n == 1) printf("1\n");
        if (n == 2) printf("2\n");
        if (n == 3) printf("1\n");
        if(n>3) printf("%d\n", n-2*(i-1));
    }
}
时间: 2024-10-12 21:36:47

赛码编程练习的相关文章

赛码网的一道百度编程题

最近偶尔接触到这个赛码网,看了百度的一道编程题,于是尝试了一下,发现虽然天天写代码实现这个居然花了我好长时间,仍然没有通过全部案例.目前给的通过率是83% 题目如下: 小B最近对电子表格产生了浓厚的兴趣,她觉得电子表格很神奇,功能远比她想象的强大.她正在研究的是单元格的坐标编号,她发现表格单元一般是按列编号的,第1列编号为A,第2列为B,以此类推,第26列为Z.之后是两位字符编号的,第27列编号为AA,第28列为AB,第52列编号为AZ.之后则是三位.四位.五位--字母编号的,规则类似. 表格单

赛码网线上PHP编译器报错

360笔试题,在赛码网提交后报错“Runtime Error:[ERROR] A Not allowed system call: runid:6660947 callid:25” 题目链接:http://exercise.acmcoder.com/online/online_judge_ques?ques_id=3980&konwledgeId=42 报错内容: 产生该错误的代码: 申明:不是因为代码逻辑原因产生错误,首先代码逻辑是按照官方给出的答案通过php实现:其次,同样的用例在本地运行(

赛码网算法:认老乡

最近在赛码网上做算法题,看到这样一道题,经过不断的学习,最后解决了.把我的思想和代码给大家分享一下~ 认老乡 题目描述大学的同学来自全国各地,对于远离家乡步入陌生大学校园的大一新生来说,碰到老乡是多么激动的一件事,于是大家都热衷于问身边的同学是否与自己同乡,来自新疆的小赛尤其热衷.但是大家都不告诉小赛他们来自哪里,只是说与谁同乡,从所给的信息中,你能告诉小赛有多少人确定是她的同乡吗? 输入每个测试实例首先包括2个整数,N(1 <= N <= 1000),M(0 <= M <= N*

C语言与VT100控制码编程

C语言与VT100控制码编程 声明: 1. 如果您打算阅读本文,希望您已经了解过C语言的基本语法,本文不对C语言的基本语法进行说明,因为那些东西几乎唾手可得; 2. 本文在vim中编辑,请尽量是用vim进行阅读,因为有不对齐的现象; 3. 本人强烈建议您先编译,运行本文最后提供的sinDemo源代码,再看本文的正文,因为您看了运行效果,您就知道本人为什么要写这篇文章; \\\\\\\\\\\\--*目录*--/////////// | 一. 需求背景 | | 二. VT100控制码是什么 | |

ACM 五一杭电赛码&quot;BestCoder&quot;杯中国大学生程序设计冠军赛小记

对于这项曾经热爱的竞赛,不得不说这是我最后一年参加ACM比赛了,所以要珍惜每一次比赛的机会. 五一去杭电参加了赛码"BestCoder"杯中国大学生程序设计冠军赛,去的队伍包括了今年19支World final的队伍,几乎是全国最强的46所学校各出了一个代表队,十分感谢学校给了我这个大三的老年血手这次去比赛的机会. 比赛在5.2一天内完成,上午的热身赛居然是上一场Bestcoder的原题= =.虽然我们三个人都没做过...不过我还是水水的写了前两道题. 在中午的悲惨淋雨后,下午正赛开始

赛码网 5.12周考

本来都不想写下去了,后来想想,还是写写吧!以后回过头来看看,就可以说,哦,那些时间去做这个了! 下面步入正题. 赛码网 5.12周考 题目挺难的,反正我2道题目都没有做出来,官网上也没有贴出来答案,就只好自己去找了. 1. 暴力搜索肯定是不行的,时间复杂度很高,只好找一种数个数的方法,没有想到. 题解链接:http://krydom.com/bzoj1801/ 解释的应该很详细,但是我有一点疑问, 放2个到一个空列上 与 放一个到只有一个的列上,另一个放到空列上, 这两种的转移方式 应该是不同的

贪心 赛码 1001 Movie

题目传送门 1 /* 2 贪心:官方题解: 3 首先我们考虑如何选择最左边的一个区间 4 假设最左边的区间标号是i, 那选择的另外两个区间的左端点必定要大于Ri 5 若存在i之外的j, 满足Rj<Ri, 那么另外两个区间的选择余地必定不会减少 6 因此,为了使另外两个区间有尽可能多的选择,我们选择一个右端点最小的区间作为最左边的区间是最好的 7 同理,我们选择一个左端点最大的区间作为最右边的区间,也将提供最多的选择 8 确定了这两个区间之后,只需判断是否存在一个区间位于它们中间且不交叉即可 9

递推DP 赛码 1005 Game

题目传送门 1 /* 2 递推DP:官方题解 3 令Fi,j代表剩下i个人时,若BrotherK的位置是1,那么位置为j的人是否可能获胜 4 转移的时候可以枚举当前轮指定的数是什么,那么就可以计算出当前位置j的人在剩下i − 1个人时的位置 5 (假设BrotherK所处的位置是1),然后利用之前计算出的F值判定此人是否可能获胜 6 时间复杂度为O(n3) 7 dp[i][j] 表示有i个人,j位置的人是否可能胜利.dp[1][0] = 1; cnt = sum (dp[n][i]); 8 有最

赛码网算法: 上台阶 ( python3实现 、c实现)

上台阶 题目描述 有一楼梯共m级,刚开始时你在第一级,若每次只能跨上一级或二级,要走上第m级,共有多少走法?注:规定从一级到一级有0种走法. 输入输入数据首先包含一个整数n(1<=n<=100),表示测试实例的个数,然后是n行数据,每行包含一个整数m,(1<=m<=40), 表示楼梯的级数.样例输入223输出对于每个测试实例,请输出不同走法的数量.样例输出12时间限制C/C++语言:2000MS其它语言:4000MS 内存限制C/C++语言:65537KB其它语言:589825KB