HDU1099---数学 | 思维

hdu 1099 Lottery
题意:1~n编号的彩票,要买全,等概率条件下平均要买几张。
已经买了m张时,买中剩下的概率为1-m/n,则要买的张数为1/(1-m/n)
n=2,s=1+1/(1-1/2);n=3,s=1+1/(1-1/3)+1/(1-2/3)
s=1+1/(1-1/n)+1/(1-2/n)+1/(1-3/n)+……+1/(1-(n-1)/n)=n/n+n/(n-1)+n/(n-2)+……+n/1=sum(n/i),i=1~n
b/a+d/c=(bc+ad)/(ac)
然后递推着通分,化简;输出。

///实现 sum(n/i) (i=1~n)
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<cmath>
#include<string>
#include<algorithm>
using namespace std;
#define LL long long
LL gcd(LL a,LL b)
{
    return b==0?a:gcd(b,a%b);
}
struct fen{
    LL a,b;

};
fen& add(struct fen&a,struct fen&b)
{
    a.a=a.a*b.b+a.b*b.a;
    a.b=a.b*b.b;
    LL t=gcd(a.a,a.b);
    a.a/=t;
    a.b/=t;
    return a;
}
int ditNum(LL a)
{
    int cnt=0;
    while(a)
    {
        cnt++;
        a/=10;
    }
    return cnt;
}
int main()
{
    int n;
    LL fenz=0,fenm=0;
    struct fen f,f1;
    while(~scanf("%d",&n))
    {
        f.a=n;f.b=1;
        for(int i=2;i<=n;i++)
        {
            f1.a=n;f1.b=i;
            f=add(f,f1);
        }
        if(f.a%f.b==0)
        {
            cout<<f.a/f.b<<endl;
        }
        else
        {
            LL t=f.a/f.b;
            int a=ditNum(t),b=ditNum(f.b);
            a++;
            int x=a;
            while(a--)
                cout<<" ";
            cout<<f.a-t*f.b<<endl;
            cout<<t<<" ";
            while(b--)
                cout<<"-";
            cout<<endl;
            while(x--)
                cout<<" ";
            cout<<f.b<<endl;
        }
    }
}
时间: 2024-10-22 07:33:56

HDU1099---数学 | 思维的相关文章

程序设计中的数学思维函数总结(代码以C#为例)

最近以C#为例,学习了程序设计基础,其中涉及到一些数学思维,我们可以巧妙的将这些逻辑问题转换为代码,交给计算机运算. 现将经常会使用到的基础函数做一总结,供大家分享.自己备用. 1.判断一个数是否为奇数 定义:整数中,能被2整除的数是偶数,不能被2整除的数是奇数 思路点:n%2!=0则为奇数 /// <summary> /// 判断一个整数是不是奇数 /// </summary> /// <param name="n">要判断的整数</para

hdu 4710 Balls Rearrangement (数学思维)

题意:就是  把编号从0-n的小球对应放进i%a编号的盒子里,然后又买了新盒子, 现在总共有b个盒子,Bob想把球装进i%b编号的盒子里.求重置的最小花费. 每次移动的花费为y - x ,即移动前后盒子编号的差值的绝对值. 算法: 题目就是要求                  先判断  n与  lcm(a,b)的大小,每一个周期存在循环,这样把区间缩短避免重复计算. 如果n>lcm(a,b)则   ans = (n/lcm)*solve(lcm)+solve(n%lcm) 否则   ans =

Acdreamoj1115(数学思维题)

题意:1,3是完美数,如果a,b是完美数,则2+a*b+2*a+2*b,判断给出的n是否是完美数. 解法:开始只看出来2+a*b+2*a+2*b=(a+2)*(b+2)-2,没推出更多结论,囧.没办法,只能暴力将所有的完美数求出来然后查表.正解是c+2=(a+2)*(b+2);完美数都是有质因子3或5组成的(5本身除外): 自己暴力代码: /****************************************************** * author:xiefubao *****

【程序员的数学思维修炼】总结一

第一章 数据的表示 主要学习了会了 0 不是什么都没有,比如在java里BigDecimal里面是根据最高的那个精度来的,比如1.99+0.01=2.00 这时候提交可能会判错,所以要去掉后导零 为啥要用二进制 还有哪些进制,神奇的八卦,八进制.钟表使用的十二进制.半斤八两十六进制.60年一个甲子六十进制 关于二进制,最主要的是要熟练掌握位运算!一些做题中常用的技巧,比如求n的m次方,判断奇偶,统计一的个数, 这一章里还提到了20!阶乘问题,还记得怎么解决大数阶乘吗. 第二章 神奇的素数 1.验

数学思维和编程思维

1.编程没有数学基础不行 2.但懂数学不等于懂编程 举一个例子: 求1+2+3+4+……+99+100的和. 数学解法通常是: 1.(1+100)*100/2=5500 2.小学生的解法:1+2=3.3+3=6.……这样累算下去. 编程解法呢?跟数学解法2相同,代码如下: static void Main(string[] args) { int theResult = 0; for (int i = 1; i <= 100; ++i) { theResult += i; } Console.W

数学思维和逻辑能力

在无数个辗转反侧.难以入寐的夜晚,我用力地思考着一个问题:到底要不要走上编程这一条道路?想要成为一个合格的编程人员,深谙编程之道,这条路并不好走.或枯燥无味,或心力憔悴,但亦能寻到其中乐趣,发现常人难以发现的背后之美.所以,痛定思痛,决定搭上这辆于我而言的编程末班车. 接触编程,很多人第一个想法就是选择一门什么程序设计语言,我也为之苦恼了很久.找寻一圈,最后回到起点,发现了一个更加重要的东西:编程本身的思想.就此,我打一个简单的比方:学习程序设计就好比学习射击,编程语言就好比我们手里紧紧握住的枪

不一样的数学思维导图

数学有它的特殊性,而与思维导图又能碰撞出不同的火花.思维导图制作软件让你将表达.记录.分析想法,将相关的信息连接到一起,探索更多可能性,在数学控制和归纳概念上有极大的帮助. 小编比较了这四个软件:"MindManager"."XMind"."IMindmap"和"MindMapper",在数学的应用上,小编认为"MindManager"最合适,因为数学知识有很多的关联,而且两者之间最好用箭头的方式表示最好.

数学思维修炼

最近想阅读一些数学方面的资料,但是又想和自己的工作联系上,因此就找到了这本<程序员的数学思维修炼(趣味解读)>,下面会对本书的知识点做个梳理. 1.2.6 数的阶乘 1.2.7 大整数 1.3.3 二进制运算 1.3.5 十进制和二进制之间的转换 以基数B再取余的方法 1.4 八进制.十六进制.六十进制 2.1.1 素数 2.1.3 试除法(循环到√n即可),数学家筛选法,Eratosthenes寻找100以内的素数的算法:依次去除2.3.5.7的倍数的整数 2.1.4 素数定理 2.2.2

让我们的数学思维再灵活一些

我们的数学思维怎么才能变得灵活些? 储备必要的数学模型 学会必要的数学转化和划归 做好每道高价值试题的反思总结 举例说明 平时的学习中我们还能怎么做? 原文地址:https://www.cnblogs.com/wanghai0666/p/10263787.html

数学思维导图的作用是什么?如何绘制思维导图

数学对大家来说应该是比较难的,思维导图在我们学习数学的过程中也是比较重要的,那么,重要在哪呢?下面给大家总结一下思维导图思维导图的作用及绘制技巧. 数学思维导图学什么? 1.是什么:首先将数学的基本概念记住,理清每一个概念的定义是什么,然后把概念变成自己理解的符号在思维导图中做出图像: 2.怎么做:每个问题都有它的解决方法,思路,可以将这种思路划成步骤在数学思维导图中: 3.有什么用:用数学思维导图记住知识的条件,然后记住什么时候用,有什么用 如何绘制思维导图? 1.打开迅捷画图,点击页面上方[