A题意:给出两个数组,让你根据题目给出的公式算出结果,最后的结果要是最简分式。
思路:分子分母分开算,模拟一遍,再将分子分母约分(找最大公因数,把他们都除个最大公因数)模拟的顺序是从尾部开始,分子是b[n],分母为a[n],每次都是除式,分子变分母,分母变分子,再把值也相应的变一下
1 1 1
2 3 4
2/(1+3/(1+1/4)): 1:1/4 ,2:12/5,3: 5/4/
#include<iostream>
#include<cstdio>
using namespace std;
int huajian(int a, int b)//求出最大公因数
{
int c = b;
while(a%b!=0)
{
c = a%b;
a = b;
b = c;
}
return c;
}
int main()
{
int t,n,a[100],b[100],tt=0,m=0,z=0;
cin>>t;
while(t--){
tt++;
cin>>n;
for(int i=1;i<=n;i++)
cin>>a[i];
for(int i=1;i<=n;i++)
cin>>b[i];
m=a[n];
z=b[n];
int tm=m,tz=z;
for(int i=n-1;i>=1;i--)
{
z=m*b[i];//分母变分子并且要乘新增的b[i]
m=m*a[i]+tz;//分母其实是上次的分子,
//上次的分子并不完全是tz,还有m*a[i]
tz=z;//记录上次的分子,用来计算分母
}
int s=huajian(z,m);
z=z/s;
m=m/s;
printf("Case #%d: %d %d\n",tt,z,m);
}
}
B题意:给你一个n(1<=n<=20)求出在n条(1-n)的边中,最少去掉多少条就不能构成三角形。
一开始以为规律没找出来,然后看了只有数据只有20,我就直接把20个情况的都算了一遍,直接就打表出来了
using namespace std;
int a[22]={0,0,0,0,1,1,2,3,3,4,5,6,7,7,8,9,10,11,12,13,14};
int main()
{
int t,n,ans,tt=0;
cin>>t;
while(t--){
tt++;
cin>>n;
printf("Case #%d: %d\n",tt,a[n]);
}
}
但是正经的解应该是用队列去模拟一遍
q.push(3);
q.push(2);//1是不能和别的边组成三角形的,不用管
k=4;
while(k<=20)
{
n=q.front();
q.pop();
m=q.front();
if(n+m>k)//如果能构成三角形,
//首先就需要与新加进来的边最接近的边能与他构成三角形
{
ans++;
q.push(n);
a[k]=ans;
}
else
{
q.push(k);
a[k]=ans;
}
k++;
}
C题意:每组给出一个n,求出1/i^2(1<=i<=n)的和
百度一波1-n^2分之一的和最终趋近与 π*π/6:
将sinx按泰勒级数展开:
sinx=x-x3/3!+x5/5!-x^7/7!+ …
于是sinx/x=1-x2/3!+x4/5!-x^6/7!+ …
令y=x2,有sin√y/√y=1-y/3!+y2/5!-y^3/7!+ …
而方程sinx=0的根为0,±π,±2π,…
故方程sin√y/√y=0的根为π²,(2π)²,…
即1-y/3!+y2/5!-y3/7!+…=0的根为π²,(2π)²,…
由韦达定理,常数项为1时,根的倒数和=一次项系数的相反数
即1/π²+1/(2π)²+…=1/3!
故1+1/2²+1/3²+ … =π²/6
相信总有数学大佬能看懂(记住这个规律8QAQ)
其实这题卡了数据,如果>6位数了刚好保留的5位数就等于π^2/6了,不知道规律的也能猜出到后面的值应该会趋近某一个值,然后可以慢慢尝试卡出那个值
#include<bits/stdc++.h>
using namespace std;
const int N = 1e6 + 5;
char a[N];
double sum[N];
int main()
{
for(int i = 1 ; i < N ; i++)
sum[i] = sum[i - 1] + (double)1/i/i;
while(~scanf("%s",a)){
int l = strlen(a);
if(l >= 7) printf("%.5lf\n",sum[1000000]);
else{
int n = 0;
for(int i = 0 ; i < l ; i++){
n = n * 10 + a[i] - '0';
}
printf("%.5lf\n",sum[n]);
}
}
return 0;
}
刚刚CSDN炸了 D题
D题理解可能不到位,请指出,但是看代码+注解应该能看懂