【入门编程题】--2.级数求和与三连击问题

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
    }
}

猜你喜欢

转载自blog.csdn.net/wxq_1993/article/details/82890563