新普金娱乐网址


数学会时有发生一个人惊艳了而的年轻,却温柔不了若的时刻。

卿来多思量认真的做成一码事?

数学原本 0.1*0.2!=0.02

  • 九月 17, 2018
  • 数学
  • 没有评论

本人不过想说当这种难度的问题就是根据着20%底数量暴力。。。

今天老大一本正经的与自身说如付我一个重大任务。解决有关0.1*0.2的问题。

分数:40+20+36.1+38+0+19

0.1*0.2休就相当于0.02吗??!!一个小学生都晓得之答案,但是程序报你0.1*0.2并不是0.02。

T1 签到题 III

实则,不仅仅是 JS,在其余应用 IEEE754 浮点数标准的言语中,0.1 * 0.2
都不见面当 0.02,0.1+0.2吗非会见等0.3,就是如此。

题材背景

pj组选手zzq近日学会了请求最大公约数的折腾相除法。

假若后有人问您0.1+0.2
等于多少,0.1*0.2等于多少而是转为坑了,就是如此神奇。

题目叙述

类比较辗转相除法,zzq定义了一个意料之外之函数:

typedef long long ll;
ll f(ll a,ll b)
{
    if(a==b) return 0;
    if(a>b) return f(a-b,b+b)+1;
    else return f(a+a,b-a)+1;
}

zzq定义完这函数兴高采烈,随便输入了点滴单数,打算计算f值,发现这函数死循环了…于是zzq定义这个函数递归死循环的景象下f值为0。

现今zzq输入了一个数n,想求发出数学 1

双重神奇之是,9007199254740992+1=9007199254740992

输入输出格式

输入格式:

平等执行两独数n。

输出格式:

一行一个累数学 2

数学 3  数学 4

输入输出样例

输入样例#1:

100

出口样例#1:

1124

输入样例#2:

2000

输出样例#2:

68204

 

说明

对于10%的数据,数学 5

对于40%的数据,数学 6

对于70%的数据,数学 7

对于100%的数据,数学 8

数学 9数学 10

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 using namespace std;
 5 typedef long long ll;
 6 ll i,j;
 7 int tot=0;
 8 int flag=0;
 9 inline ll f(ll a,ll b)
10 {
11     if(tot>10)
12     {
13         flag=1;
14         return 0;
15     }
16     if(a==b) return 0;
17     if(a>b) 
18     {
19         tot++;
20         return f(a-b,b+b)+1;
21     }
22     else 
23     {
24         tot++;
25         return f(a+a,b-a)+1;
26     }
27 }
28 int main()
29 {
30         ll n;
31         ll ans=0;
32         cin>>n;
33         for(i=1;i<=n;i++)
34         {
35             for(j=1;j<=n;j++)
36             {
37                 tot=0;
38                 flag=0;
39                 ll p=f(i,j);
40                 if(flag==1)continue;
41                 else
42                 ans=ans+p;
43             }
44         }    cout<<ans;        
45     return 0;
46 }

View Code

 

为什么0.1*0.2 不顶0.02为 0.1+0.2免顶0.3也,这并无是盖程序出bug
了,因为他于召开浮点数学。电脑只能本地存储整数,所以他们要有的象征十向前制数的不二法门。
这种代表带有一定程度之不准确性。 这就算是胡0.1 + 0.2!= 0.3。

T2 总统选举

首先我们事先来打探一下啊是IEEE标准754浮点数

题目背景

黑恶势力的反攻计划为小C成功摧毁,黑恶势力只好屈从。秋之国的国民解放了,举国欢庆。此时,原秋之国总统为无能守护好土地,申请辞去,并请秋之国人民的老大救星小C钦定下一样不管。作为同样曰民主人士,小C决定召开公民大选来控制下同样无。为了使末段成为总统的口得多数总人口肯定,小C看,一个总人口须要获得超过全体人数总数的一半之票数才会化总统。如果不在符合条件的候选人,小C只好自己来当临时大统。为了尽量避免这种状态,小C决定先进行几次稍范围预选,根据预选的情状,选民可以还决定好选票的去向。由于秋之国人口较多,统计投票结果以及选票变更为改成了麻烦的政工,小C找到了你,让你帮他解决这题目。

此自己不怕非多说了,您要好扣,我说之也从来不她好。

题材叙述

熟之国共有n个人,分别编号也1,2,…,n,一开始每个人还照了一样票,范围1~n,表示支持针对许编号的人当总统。共有m次预选,每次选编号[li,ri]外之选民展开小范围预选,在该距离内得到过区间大小一半之票底食指战胜,如果无丁战胜,则由于小C钦定一各候选人获得本次预选的战胜(获胜者可以免以拖欠区间内),每次预选的结果需公布出来,并且每次见面起ki个人说了算以票改投向该次预选的获胜者。全部预选结束后,公布最后变成部之候选人。

IEEE Standard 754 Floating Point
Numbers

输入输出格式

输入格式:

率先执两独整数n,m,表示秋的国人口以及预选次数。

其次行n单整数,分别代表编号1~n的选民投的批。

对接下去m行,每行先有4只整数,分别代表li,ri,si,ki,si表示一旦本次预选无人胜选,视作编号吧si的口获得胜利,接下ki个整数,分别代表决定改投的选民。

输出格式:

一齐m+1行,前m行表示各次预选的结果,最后一行表示最终成为总统的候选人,若最终准管人胜选,输出-1。

Floating-point
arithmetic

输入输出样例

输入样例#1:

5 4
1 2 3 4 5
1 2 1 1 3
5 5 1 2 2 4
2 4 2 0
3 4 2 1 4

出口样例#1:

1
5
5
2
-1

 

说明

对于前20%的数据,数学 11

对于前40%的数据,数学 12数学 13

对于前50%的数据,数学 14数学 15

对数据点6~7,保证拥有选票始终以1~10之间。

对于100%的数据,数学 16数学 17数学 18数学 19

 

数学 20数学 21

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 using namespace std;
 5 const int MAXN=10001;
 6 int p;
 7 int n,m;
 8 int a[MAXN];
 9 int tou[MAXN];
10 int piaonow[MAXN];//记录每一个区间内人的得票数 
11 int main()
12 {
13     scanf("%d%d",&n,&m);
14     for(int i=1;i<=n;i++)
15     {
16         scanf("%d",&p);
17         a[p]++;
18         tou[i]=p;//第i个人投给了p个人    
19     }
20     for(int i=1;i<=m;i++)
21     {
22         memset(piaonow,0,sizeof(piaonow));
23         int l,r,s,k;
24         int flag=0;// 区间内没有人获胜
25         int where=-1; 
26         scanf("%d%d%d%d",&l,&r,&s,&k);
27         for(int j=l;j<=r;j++)
28         {
29             piaonow[tou[j]]++;
30         }
31         for(int j=l;j<=r;j++)
32             if(piaonow[tou[j]]>(r-l+1)/2)
33             {
34                 flag=1;//有人获胜 
35                 where=tou[j];
36                 break;
37             }
38         int to;// 将要改投谁 
39         if(flag==1)
40         to=where;
41         else to=s;
42         for(int j=1;j<=k;j++)
43         {
44             scanf("%d",&p);
45             a[tou[p]]--;
46             a[to]++;
47             tou[p]=to;
48         }
49         int maxn=-1;
50         printf("%d\n",to);
51     }
52     for(int i=1;i<=n;i++)
53     {
54         if(a[i]>(n/2))
55         {
56             printf("%d",a[i]);
57             return 0;
58         }
59     }
60     printf("-1");
61     return 0;
62 }

View Code

 

今日被我们来拘禁关于 0.1,0.2,0.3,它的二进制表示

T3 核心密码A

0.1D=   2^-3 * 0.11001100110011001100110011001100110011001100110011010
0.2D=   2^-2 * 0.11001100110011001100110011001100110011001100110011010
0.3D=   2^-1 * 0.10011001100110011001111001100110011001100110011001100

问题背景

黑恶势力的基地被射线武器重创,小C带领ZAJANG人民志愿军乘胜追击,一路频战屡胜,打得敌人溃不成军。终于,小C的军队包围了让黑恶势力占领的成熟之国首都,准备开展最后决战。

而黑恶势力也非是素食的,黑恶势力的头儿等秘密制定了一个反击计划,准备一定量天内顿时执行。可惜,小C研发的Very-Strong号信号监听器早已用及时无异信息汇报给小C,并提供了地下截获的某个同黑恶势力头目电子密信中详尽的计划安排。黑恶势力阴险狡诈,密信中的计划经过了大半再度复杂的加密处理,小C用他研发的如出一辙拟完整的破密系统成功破解了90%以上的密码,破密系统提醒而使连续破解密码,先使提供几乎单复杂函数的盘算方法,这自难以休倒小C,但为节省时间,身为小C助手的公是否帮他解决其中一个简单的函数?

本人是当ionic2 项目中经npm install了double-bits 和 pad 

题材叙述

令g(n)表示n能表示成几栽不同的意k次方数(k>1),求数学 22

例如,数学 23,所以g(64)=3。

接下来ts 文件里这么形容

输入输出格式

输入格式:

多组询问,第一履一个整数T表示了解组数。

连通下T行,每行一个整数n,表示询问f(n)。

出口格式:

T行,每行一个实数,表示f(n),保留八各小数。

由精度误差,你的答案和标准答案差的绝对化值在数学 24中即可通过

import { Component } from '@angular/core';
import * as db from 'double-bits';
import * as pad from 'pad';

@Component({
  selector: 'page-double-bits',
  templateUrl: 'double-bits.html',
})
export class DoubleBits {

  constructor() {
    console.log("0.1D=   " + this.base2Str(0.1));
    console.log("0.2D=   " + this.base2Str(0.2));
    console.log("0.3D=   " + this.base2Str(0.3));
  }

  base2Str(n) {
    var f = db.fraction(n)
    return (db.sign(n) ? "-" : "") +
      "2^" + (db.exponent(n) + 1) +
      " * 0." + pad(f[1].toString(2), 20, "0") +
      pad(f[0].toString(2), 32, "0")
  }
}

输入输出样例

输入样例#1:

2
5
15

输出样例#1:

0.25000000
0.48611111

输出:

说明

对于20%的数据,数学 25

对于40%的数据,数学 26数学 27

对于100%的数据,数学 28数学 29

数学 30数学 31

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cmath>
 4 #include<map>
 5 using namespace std;
 6 int n;
 7 double ans;
 8 int x;
 9 map<double,int>ma;
10 int main()
11 {
12     for(int i=2;i<=1000;i++)
13         for(int j=2;j<=1000;j++)
14             ma[pow(i,j)]++;
15     cin>>n;
16     for(int i=0;i<n;i++)
17     {
18         cin>>x;
19         for(int i=2;i<=x;i++)
20             ans+=ma[i]*1.0000/i;
21         printf("%.8lf\n",ans);
22         ans=0;
23     }
24     return 0;
25 }

View Code

 

 

数学 32

T4 核心密码B

  0.1100110011001100110011001100110011001100110011001101B
+  1.1001100110011001100110011001100110011001100110011010B
= 10.0110011001100110011001100110011001100110011001100111B

题材背景

无意拷题目背景了,参见核心密码A…

吁留心少志题的唯一差别。

用10.0110011001100110011001100110011001100110011001100111B转化成为真值,结果为:0.30000000000000004

题材叙述

令g(n)表示n能表示成几栽不同之全k次方数(k>1),求数学 33

例如,数学 34,所以g(64)=3。

所以 0.1+0.2=0.30000000000000004 是这般来的了 。

输入输出格式

输入格式:

多组询问,第一实行一个整数T表示了解组数。

属下去T行,每行一个整数n,表示询问f(n)。

出口格式:

T行,每行一个实数,表示f(n),保留十四位小数。

鉴于精度误差,你的答案和标准答案差的断值在数学 35内即可通过

那一旦自己必然要是 0.1+0.2=0.3呢

输入输出样例

输入样例#1:

2
5
15

输出样例#1:

0.25000000000000
0.48611111111111

然后我找到了 这个
big.js. 一个多少若敏捷的JavaScript库,用于任意精度之十进制算术。

说明

对于20%的数据,数学 36

对于40%的数据,数学 37数学 38

对于100%的数据,数学 39数学 40

数学 41数学 42

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cmath>
 4 #include<map>
 5 using namespace std;
 6 int n;
 7 double ans;
 8 int x;
 9 map<double,int>ma;
10 int main()
11 {
12     for(int i=2;i<=1000;i++)
13         for(int j=2;j<=1000;j++)
14             ma[pow(i,j)]++;
15     cin>>n;
16     for(int i=0;i<n;i++)
17     {
18         cin>>x;
19         for(int i=2;i<=x;i++)
20             ans+=ma[i]*1.0000/i;
21         printf("%.14lf\n",ans);
22         ans=0;
23     }
24     return 0;
25 }

View Code

 

安装

T4345 简单的数学题

npm install big

题材叙述

出于出题人懒得写背景了,题目或者略一触及好。

输入一个整数n和一个平头p,你要求出数学 43,其中gcd(a,b)表示a与b的最大公约数。

才题面打错了,已修改

导入项目 

输入输出格式

输入格式:

一样执两只整数p、n。

输出格式:

一行一个平头数学 44

import * as Big from ‘big.js’;

输入输出样例

输入样例#1:

998244353 2000

输出样例#1:

883968974

 

说明

对于20%的数据,数学 45

对于30%的数据,数学 46

对于60%的数据,数学 47,时限1s。

对于另外20%底多少,数学 48,时限3s。

对最后20%的多寡,数学 49,时限6s。

对于100%的数据,数学 50且p为质数。

数学 51数学 52

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 using namespace std;
 5 typedef long long ll;
 6 ll i,j;
 7 int tot=0;
 8 int flag=0;
 9 ll mod;
10 ll p;
11 ll n;
12 ll ans=0;
13 int gcd(int x,int y)
14 {
15     if(y==0)return x;
16     else return gcd(y,x%y)%p;
17 }
18 int main()
19 {
20         cin>>p>>n;
21         for(i=1;i<=n;i++)
22             for(j=1;j<=n;j++)
23                 ans=(ans%p+(gcd(i,j)*i*j)%p)%p;
24         cout<<ans;
25     return 0;
26 }

View Code

 

 

赛后谢就未多说了,。。

武力打之爽!!!

使用

this.tt =”0.1*0.2=”+ new Big(0.1).times(0.2);

this.mm=”0.1+0.2=”+new Big(0.1).add(0.2);

 

页面显示结果:

数学 53

ps:

double-bits 
pad big-js

How numbers are encoded in
JavaScript 

揭秘 0.1 + 0.2 !=
0.3

相关文章

No Comments, Be The First!
近期评论
    分类目录
    功能
    网站地图xml地图