C++常见代码

猴子吃桃问题
猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个。
第二天早上又将剩下的桃子吃掉一半,又多吃了一个。
以后每天早上都吃了前一天剩下的一半零一个。
到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。

void f2()
{
    /*
    猴子吃桃问题 
    猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个。
    第二天早上又将剩下的桃子吃掉一半,又多吃了一个。
    以后每天早上都吃了前一天剩下的一半零一个。
    到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。    
    */
    int day,x1,x2;
    day=9;
    x2=1;
    while (day>0)
    {
        x1=(x2+1)*2;
        x2=x1;
        day--;
    }
    cout<<"total="<<x1<<endl;    
    return;

猴子吃桃递归问题

int f2new(int n) 
{
    //猴子吃桃问题递归
    int num;
    if (n==10)    
    {
        return 1;
    }
    else
    {
        num=(f2new(n+1)+1)*2;
    }
    return num;    
}
void f2taozi()
{
    cout<<f2new(1)<<endl;
}

 

求1000以内的完数;例如:6=1+2+3 

void f1()
{
    /*
    求1000以内的完数;例如:6=1+2+3 
    */
    int k[11];
    int i,a,n,s;
    for (a=2;a<=6;a++)  //a<=1000 
    {
        n=0;
        s=a;
        for (i=1;i<a;i++)
        {
            //
            if ((a%i)==0)
            {
                n++;
                s=s-i;
                k[n]=i; //将找到的因子赋给k[1],...,k[10] 
            }    
            //输出    i,a,n,s ,k[n]的值 
            cout<<"i="<<i<<" a= "<<a<<" n="<<n<<" s="<<s<<" k["<<n<<"]="<<k[n]<<endl;            
        }
        if (s==0)
        {
            cout<<a<<" is a 完数"<<endl;
            cout<<"its factorys are: ";
            for (i=1;i<n;i++)
            {
                cout<<k[i]<<" ";
            }
            cout<<k[n]<<endl;
        }
    }
    return ;
}

 辗转相除法 求最大公约数和最小公倍数

/*
辗转相除法算法步骤:两个数中用较大的数除以较小的数,再用出现的余数(第一余数)去除除数, 
再用出现的余数(第二余数)去除第一余数,如此反复,直到最后余数为0为止。
得到最后的除数就是这两个数的最大公约数。
辗转相除法算,又名欧几里德算法 ,是求最大公约数的一种方法 。
以除数和余数反复做除法运算,最终当余数为0时,取当前算式除数为最大公约数。
例如: 
1999/615=3 (余数152) 
615/152=4 (余数7) 
152/7=21  (余数5) 
7/5=1     (余数2) 
5/2=2     (余数1)
2/1=2     (余数0)
至此,得出1997和615的最大公约数为1 
*/ 
void f3()
{
    int p,r,m,n,t;
    m=9;
    n=13;
    if (n<m)
    {
        t=n;
        n=m;
        m=t;
    }
    p=m*n;
    while (m!=0)
    {
        r=n%m;
        n=m;
        m=r;
    }
    cout<<"最大公约数为:"<<n<<endl;
    cout<<"最小公倍数为:"<<p/n<<endl;
    return;    
}

 

posted @ 2022-12-09 10:24  jhtchina  阅读(369)  评论(0)    收藏  举报