有趣的C++代码(下)

26.求素数

求1000以内的所有素数。
 


#include <iostream>
using namespace std;
void main()
{
    int n,i,count=0,f;
    for(n=2;n<1000;n++)
    {
        for(f=0,i=1;i<n;i++)
            if(n%i==0) f++;
        if(f==1)
        {
            cout<<n<<" ";
            count++;
            if(count%15==0)    cout<<endl;
        }
    }
}

27.哥德巴赫猜想

验证:2000以内的正偶数都能够分解为两个素数之和(即验证哥德巴赫猜想对2000以内的正偶数都成立)。
 


#include <iostream>
using namespace std;
int isprime(int n)
{
    int i,f=0;
    for(i=1;i<=n;i++)
        if(n%i==0)    f++;
    if(f==2) return 1;
    else return 0;
}
void main()
{
    int n,i,count=0;
    for(n=4;n<=2000;n+=2)
        for(i=3;i<n;i++)
            if(isprime(i)==1&&isprime(n-i)==1)
            {
                cout<<n<<"="<<i<<"+"<<n-i<<"  ";
                count++;
                if(count%5==0) cout<<endl;
                break;
            }
}

28.可逆素数

求四位的可逆素数。可逆素数即:一个素数将其各位数字的顺序倒过来构成的反序数也是素数。
 


#include <iostream>
using namespace std;
int isprime(int n)
{
    int i,f=0;
    for(i=1;i<=n;i++)
        if(n%i==0)    f++;
    if(f==2) return 1;
    else return 0;
}
void main()
{
    int n,m,g,s,b,q,count=0;
    for(n=1000;n<10000;n++)
    {
        g=n%10;
        s=n/10%10;
        b=n/100%10;
        q=n/1000%10;
        m=g*1000+s*100+b*10+q;
        if(isprime(n)==1&&isprime(m)==1)
        {
            cout<<n<<"  ";
            count++;
            if(count%5==0) cout<<endl;
        }
    }
}

29.回文素数

求不超过1000的回文素数。
 


#include <iostream>
using namespace std;
int isprime(int n)
{
    int i,f=0;
    for(i=1;i<=n;i++)
        if(n%i==0)    f++;
    if(f==2) return 1;
    else return 0;
}
void main()
{
    int n,m,g,s,b,count=0;
    cout<<"11"<<"  ";
    for(n=1;n<1000;n++)
    {
        g=n%10;
        s=n/10%10;
        b=n/100%10;
        m=g*100+s*10+b;
        if(isprime(n)==1&&m==n)
        {
            cout<<n<<"  ";
            count++;
            if(count%5==0) cout<<endl;
        }
    }
}

30.百钱买百鸡问题

      公元前5世纪,我国古代数学家张丘建在《算经》一书中提出了“百鸡问题”:鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一。百钱买百鸡,问鸡翁、鸡母、鸡雏各几何?
 


#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
    int j,i,k;
    cout<<"公鸡     母鸡     小鸡"<<endl;
    for(i=0;i<=20;i++)
        for(j=0;j<=33;j++)
        {
            k=100-i-j;
            if((5*i+3*j+k/3==100)&&(k%3==0))
            cout<<setw(6)<<i<<setw(10)<<j<<setw(10)<<k<<endl;
        }
}

31、爱因斯坦的数学题

爱因斯坦出了一道这样的数学题:有一条长阶梯,若每步跨2阶,则最最后剩一阶,若每步跨3 阶,则最后剩2阶,若每步跨5阶,则最后剩4阶,若每步跨6阶则最后剩5阶。只有每次跨7阶,最后才正好一阶不剩。请问这条阶梯共有多少阶?
 


#include <iostream>
using namespace std;
void main()
{
       int n=1;
       while(!((n%2==1) && (n%3==2) && (n%5==4) && (n%6==5) && (n%7==0)))
        n++;
       cout<<"台阶数="<<n<<endl;
}

32.换分币

用一元人民币兑换成1分、2分和5分硬币,共有多少种换法?
 


#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
    int j,i,k;
    cout<<"一分     两分     五分"<<endl;
    for(i=0;i<=20;i++)
        for(j=0;j<=50;j++)
        {
            k=100-5*i-2*j;
            if(k>=0)
                cout<<setw(6)<<k<<setw(10)<<j<<setw(10)<<i<<endl;
        }
}

33.年龄几何

张三、李四、王五、刘六的年龄成一等差数列,他们四人的年龄相加是26,相乘是880,求以他们的年龄为前4项的等差数列的前20项。
 


#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
    int a,d,i;
    for(d=1;d<=6;d++)
        for(a=1;a<4;a++)
            if(4*a+6*d==26&&a*(d+a)*(a+2*d)*(a+3*d)==880)
                for(i=0;i<20;i++)
                    cout<<a+i*d<<setw(4);
    cout<<endl;
}

34.求任意两个自然数的最大公约数、最小公倍数。

分别使用辗转相除法;数学上的试探方法完成。
 


#include <iostream>
using namespace std;
void main()
{
       int n,m,gcd,lcm,temp;
       cout<<"请输入两个自然数"<<endl;
       cin>>n>>m;
       if(n<m)
       {
        temp=n;
           n=m;
           m=temp;
       }    
       gcd=n;
    while(n%gcd!=0 || m%gcd!=0)
    {
        gcd--;
    }
        lcm=m;
    while(lcm%n!=0 || lcm%m!=0)
    {
            lcm++;
        }
       cout<<"最大公约数为:"<<gcd<<endl;
       cout<<"最小公倍数:"<<lcm<<endl;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值