1.级数求和问题
已知:S_n= 1+1/2+1/3+…+1/nSn=1+1/2+1/3+…+1/n。显然对于任意一个整数KK,当nn足够大的时候,S_nSn大于KK。
现给出一个整数KK(1 \le k \le 151≤k≤15),要求计算出一个最小的nn;使得S_n>KSn>K。
#include<iostream>
using namespace std;
int main()
{
int K,n=0;
double S=0.00; //求和问题S的数据类型为浮点型数据或者双精度类型
cin>>K;
while(S<=K)
{
n++;
S+=(1.0/n); // 存在数据类型的转换 int->double (1.0/int)
}
cout<<n;
return 0;
}
2.三连击
将1,2, \cdots ,91,2,⋯,9共99个数分成33组,分别组成33个三位数,且使这33个三位数构成1:2:31:2:3的比例,试求出所有满足条件的33个三位数。
要注意的是百、十、个位数的拆分。分别拆分三个数的位数,存放到数组中,每个数出现的次数只能是一次。
#include<iostream>
using namespace std;
int main()
{
int a[9];
int p,q,r,s,t,u,v,w,x, z;
for(int i=1;i<=3;i++)
{
for(int j=1;j<=9;j++)
{
for(int k=1;k<=9;k++)
{
p=i*100+j*10+k;
q=2*p;
r=3*p;
//第二个数的百、十、个位
s=q/100;
t=(q%100)/10;
u=q%10;
//第三个数的百、十、个位
v=r/100;
w=(r%100)/10;
x=r%10;
a[0]=i;
a[1]=j;
a[2]=k;
a[3]=s;
a[4]=t;
a[5]=u;
a[6]=v;
a[7]=w;
a[8]=x;
z=0;
for(int m=0;m<9;m++)
{
for(int n=m+1;n<9;n++)
{
if(a[m]==a[n])
z=1;
}
}
if(z!=1&&r<=999&&t!=0&&u!=0&&w!=0&&x!=0)
cout<<p<<" "<<q<<" "<<r<<endl;
}
}
}
return 0;
}
int cf(int x){//我们定义一个函数,拆分我们组合出来的每一位数,所以它叫拆分√
while(x!=0){
gw=x%10;
x=(x-gw)/10; //其实完全可以x/10,为了理解方便,我们将x的个位减为0,然后/10把0削去,不断将当期的数拆分
d[gw]++;//计数器加1
}
}