C++趣味程序

目录

1.绘制余弦曲线

2.绘制圆

3.歌星大奖赛

4.求最大约数

5.高次方数的尾数

6.阶乘末尾的零的个数

7.借书方案知多少

8.杨辉三角

9.数制转化

10.打渔还是晒网

11.抓交通肇事犯

12.该存多少钱

13.怎样存钱利最大

14.捕鱼和分鱼

15.出售金鱼

16.平分七筐鱼

17.有限五位数

18.8除不尽的自然数

19.一个奇异的三位数

20.四位反序数

21.求车速

22.由两个平方三位数获得三个平方二位数

23.阿姆斯特朗数

24.完全数

25.亲密数#####

26.自守数#####

27.回文数

28.求具有abcd=(ab+cd)2性质的四位数。

29.求素数

30.哥德巴赫猜想

31.可逆素数

32.回文素数

33.要发就发

34.素数幻方

35.百钱买百鸡问题

36、爱因斯坦的数学题

37.换分币

38.年龄几何

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


1.绘制余弦曲线


#include
#include
using namespace std;
void main()
{
    double y;
    int x,m;
    for(y=1;y>=-1;y-=0.1)
    {
        m=acos(y)*10;
        for(x=1;x             cout<<" ";
        cout<<"*";
        for(;x<62-m;x++)
            cout<<" ";
        cout<<"*"<     }
}


2.绘制圆


#include
#include
using namespace std;
void main()
{
    double y;
    int x,m;
    for(y=10;y>=-10;y--)
    {
        m=2*sqrt(100-y*y);
        for(x=1;x<30-m;x++)
            cout<<" ";
        cout<<"*";
        for(;x<30+m;x++)
            cout<<" ";
        cout<<"*"<         }
}


3.歌星大奖赛


10个评委打分,去掉最高分和最低分,剩余8个得分的平均值为选手得分。
#include
using namespace std;
void main()
{
    double aver,sum=0;
    int a[10],n,x,i,j,t;
    for(n=0;n<10;n++)
    {
        cout<<"请输入第"<         cin>>x;
        a[n]=x;
    }
    for(i=0;i<9;i++)
        for(j=i+1;j<10;j++)
            if(a[j]             {
                t=a[j];
                a[j]=a[i];
                a[i]=t;
            }
    for(i=1;i<9;i++)
        sum+=a[i];
    aver=sum/8;
    cout<<"该参赛选手的得分为:"< }


4.求最大约数


求555555的约数中最大的三位数。
#include
using namespace std;
void main()
{
    int n,m,max;
    cout<<"请输入一个数!"<     cin>>n;//输入555555
    for(m=100;m<=999;m++)
        if(n%m==0)
            max=m;
    cout< }


5.高次方数的尾数


求13的13次方的最后三位数。
#include
using namespace std;
void main()
{
    int i,p=1,w,b,s,g;
    for(i=1;i<=13;i++)
        p=p*13;
    g=p%10;
    s=p/10%10;
    b=p/100%10;
    w=b*100+s*10+g;
    cout<<"13的13次方的最后三位数是:"< }


6.阶乘末尾的零的个数


100!的末尾有多少个0。
#include
using namespace std;
void main()
{
    int i,count=0;
    for(i=5;i<=100;i+=5)
    {
        count++;
        if(i%25==0)
            count++;
    }
    cout<<"100!的末尾有"< }


7.借书方案知多少


现将5本书借给3个人,每个人只能借一本,则可以有多少不同的借法?
#include
using namespace std;
void main()
{
    int a,b,c,count=0;
    for(a=1;a<=5;a++)
        for(b=1;b<=5;b++)
            for(c=1;a!=b&&c<=5;c++)
                if(c!=a&&c!=b)
                {
                    count++;
                    cout<                     if(count%5==0) cout<                 }
}


8.杨辉三角


在屏幕上显示杨辉三角。
#include
#include
using namespace std;
void main()
{
    int a[10][10],i,j,k;
    for(i=0;i<10;i++)
    {
        for(j=0;j<=i;j++)
        {
            if(j==0 || i==j)
                a[i][j]=1;
            else 
                a[i][j]=a[i-1][j-1]+a[i-1][j];
        }
        for(k=0;k<=9-i;k++)
            cout<<"  ";
        for(j=0;j<=i;j++)
            cout<         cout<     }
}


9.数制转化


将任一十进制整数转化为任意进制形式。
#include
using namespace std;
void main()
{
    int a[10000],b,i,j,n,p;
    cout<<"请输入一个数"<     cin>>n;
    cout<<"您想把它转化成几进制的数"<     cin>>p;
    for(i=0;n;i++)
    {
        b=n%p;
        n=n/p;
        a[i]=b;
    }
    for(j=i-1;j>=0;j--)
        cout< }


10.打渔还是晒网


某人从1990年1月1日开始“三天打鱼两天晒网”,问这个人在以后的某一天是在“打渔”,还是在“晒网”。
#include
#include
using namespace std;
void main()
{
    int a[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
    int b[13]={0,31,29,31,30,31,30,31,31,30,31,30,31};
    int y,m,d,g,s,b;
    cout<<"请输入日期年/月/日"<     cin>>y>>m>>d;
    g=(y-1991)/4*1461;
    s=m-1;
    b=d-1;
    if(y%4==0&&y%100!=0||y%400==0)
    {
        g=(y-1991)/4*1461;
        s=(y-1991)
     }

11.抓交通肇事犯


一辆卡车违反交通规则,撞人后逃跑。现场有三人目击事件,但都没有记住车号,只记下车号的一些特征。甲说:“车牌的前两位数字相同。”乙说:“车牌的后两位数字是相同的,但与前两位不同。”丙说:“四位的车号刚好是一个整数的平方。”请推理出车号。
#include
using namespace std;
void main()
{
    int a,b,i,n;
    for(a=0;a<=9;a++)
        for(b=0;b<=9;b++)
        {
            n=a*1000+a*100+b*10+b;
            for(i=1;i<100;i++)
                if(i*i==n)
                    cout<<"车号是"<         }
}


12.该存多少钱


假设银行一年整存零取的月息为0.63%。现在某人手中有一笔钱,他打算在今后五年中每年的年底取出1000元,到第五年是刚好取完,请算出他存钱时应该存多少。
#include
using namespace std;
void main()
{
    int i;
    float n=0;
    for(i=0;i<5;i++)
        n=(n+1000)/(1+0.0063*12);
    cout<<"他存钱时应该存"< }


13.怎样存钱利最大

假设银行正存整取存款不同期限的月息利率分别为:0.63%(期限1年);0.66%(期限2年);0.69%(期限3年);0.75%(期限5年);0.84%(期限8年);
        利息=本金X月息利率X12X存款年限。
现在某人手中有2000元,请通过计算选择一种存钱方案,使得存入银行20年后获得的利息最多。
#include
#include
using namespace std;
void main()
{
    double i1,i2,i3,i5,i8,n1,n2,n3,n5,n8;
    double max=0,term;
    for(i8=0;i8<3;i8++)
        for(i5=0;i5<=(20-8*i8)/5;i5++)
            for(i3=0;i3<=(20-8*i8-5*i5)/3;i3++)
                for(i2=0;i2<=(20-8*i8-5*i5-3*i3)/2;i2++)
                {
                    i1=20-8*i8-5*i5-3*i3-2*i2;
                    term=2000.0*pow(1+0.0063*12,i1)*pow(1+2*0.0066*12,i2)*
                        pow(1+3*0.0069*12,i3)*pow(1+5*0.0075*12,i5)*pow(1+8*0.0084*12,i8);
                    if(term>max)
                    {
                        max=term;
                        n1=i1;
                        n2=i2;
                        n3=i3;
                        n5=i5;
                        n8=i8;
                    }
                }
    cout<<"为了使得存入银行20年后获得的利息最多,他应该这样做:"<     cout<<"8年期存"<     cout<<"5年期存"<     cout<<"3年期存"<     cout<<"2年期存"<     cout<<"1年期存"<     cout<<"20年后获得的本息和为:"< }


14.捕鱼和分鱼


A、B、C、D、E五人在某天夜里合伙去捕鱼,到第二天凌晨时都疲惫不堪,于是各自找地方休息。日上三竿,A第一个醒来,他将鱼分为五份,把多余的一条鱼扔掉,拿走自己的一份。B第二个醒来,也将鱼分为五份,把多余的一条鱼扔掉,拿走自己的一份。一次醒来,C、D、E也按同样的方法拿鱼。问他们合伙至少捕了多少条鱼?
#include
using namespace std;
void main()
{
    int n,x,i,f=1;
    for(n=6;f;n++)
    {
        for(x=n,i=1&&f;i<=5;i++)
        {
            if((x-1)%5==0)    x=4*(x-1)/5;
            else f=0;
        }
        if(f==1) break;
        else f=1;
    }
    cout<<"他们合伙至少捕了"< }


15.出售金鱼


小明将养的一缸金鱼分五次出售:第一次卖出全部的一半加二分之一条;第二次卖出余下的三分之一加三分之一条;第三次卖出余下的四分之一加四分之一条;第五次卖出余下的五分之一加五分之一条;最后卖出余下的11条。问浴缸中共有几条鱼?

C++趣味程序_第1张图片

#include 
using namespace std;

int main()
{
	/*double n,x,i;//法一
	for(n=12;;n++)
	{
		for(x=n,i=2;i<=5;i++)
			x=x-(x/i+1/i);
		if(x==11)break;
	}
	cout<=2;i--)
	{
		n=(1/(1-1/i))*(n+1/i);
	}
	cout<


16.平分七筐鱼


甲、乙、丙三位渔夫出海打渔,他们随行船带了21只箩筐。当晚返航时,他们发现有7筐装满了鱼,还有7筐只装了半筐鱼,另外7筐则是空的。由于他们没有秤,只好通过目测认为7个满筐鱼的重量是相等的,7个半框鱼的重量是相等的。在不将鱼倒出来的前提下,怎样将鱼和筐平分为三份?

17.有限五位数


个位数为6且能被3整除的五位数共有多少?
#include
using namespace std;
void main()
{
    int n,m,count=0;
    for(n=1000;n<=9999;n++)
    {
        m=10*n+6;
        if(m%3==0)    count++;
    }
    cout<<"个位数为6且能被3整除的五位数共有"< }


18.8除不尽的自然数


一个自然数被8除余1,所得的商被8除也余1,再将第二次的商被8除后余7,最后得到一个商为a。又知这个自然数被17除余4,所得的商被17除余15,最后得到一个商是a的2倍。求这个自然数。
#include
using namespace std;
void main()
{
    int a;
    for(a=0;;a++)
        if(((a*8+7)*8+1)*8+1==(34*a+15)*17+4)
        {
            cout<<"这个自然数是:"<<(34*a+15)*17+4<             break;
        }
}


19.一个奇异的三位数


一个自然数的七进制表达式是一个三位数,而这个自然数的九进制表达式也是一个三位数,且这两个三位数的数码顺序正好相反,求这个三位数。
#include
using namespace std;
void main()
{
    int n,i,j,k;
    for(i=1;i<7;i++)
        for(j=0;j<7;j++)
            for(k=0;k<7;k++)
                if(i*9*9+j*9+k==i+j*7+k*7*7)
                {
                    n=i+j*7+k*7*7;
                    cout<<"这个奇异的三位数是:"<                     cout<                 }
}


20.四位反序数


设N是一个四位数,它的9倍恰好是其反序数,求N。反序数就是将整数的数字倒过来形成的整数。例如:1234的反序数是4321.
#include
using namespace std;
void main()
{
    int n,m,g,s,b,q;
    for(n=1000;n<1111;n++)
    {
        g=n%10;
        s=n/10%10;
        b=n/100%10;
        q=n/1000%10;
        m=1000*g+100*s+10*b+q;
        if(9*n==m)
            cout<<"N的值为:"<     }
}


21.求车速


一辆以固定速度行驶的汽车,司机在上午10点看到里程表上的读数是一个对称数(即这个数从左向右读和从右向左读是完全一样的),为95859.两小时后里程表上出现了一个新的对称数。问该车的速度是多少?新的对称数是多少?
#include
using namespace std;
void main()
{
    int n,m,g,s,b,q,w,speed;
    for(n=95860;;n++)
    {
        g=n%10;
        s=n/10%10;
        b=n/100%10;
        q=n/1000%10;
        w=n/10000%10;
        m=10000*g+1000*s+100*b+10*q+w;
        if(n==m)
        {
            speed=(m-95859)/2.0;
            cout<<"该车的速度为:"<             cout<<"新的对称数是:"<             break;
        }
    }
}


22.由两个平方三位数获得三个平方二位数


已知两个平方三位数abc和xyz,其中a、b、c、x、y、z未必是不同的;而ax、by、cz是三个平方二位数。请编程求三位数abc和xyz。
#include
#include
using namespace std;
void f(int n,float s[])
{
    int k,j=0;
    for(k=100;k>=1;j++)
    {
        s[j]=n/k%10;
        k/=10;
    }
}
void main()
{
    int i,t;
    float a[3],b[3];
    cout<<"可能的两个平方三位数是:"<     for(i=11;i<=31;i++)n
        for(t=11;t<=31;t++)
        {
            f(i*i,a);
            f(t*t,b);
            if(sqrt(a[0]*10+b[0])==(int)sqrt(a[0]*10+b[0])
                &&sqrt(a[1]*10+b[1])==(int)sqrt(a[1]*10+b[1])
                &&sqrt(a[2]*10+b[2])==(int)sqrt(a[2]*10+b[2]))
            cout<         }
}


23.阿姆斯特朗数


如果一个正整数等于其各个数字的立方和,则该数称为阿姆斯特朗数(亦成为自恋性数)。如407=43+03+73就是一个阿姆斯特朗数,试编程求1000以内的所有阿姆斯特朗数。
#include
#include
using namespace std;
void main()
{
    int n,g,s,b,m;
    cout<<"1000以内的所有阿姆斯特朗数有:"<     for(n=2;n<1000;n++)
    {
        g=n%10;
        s=n/10%10;
        b=n/100%10;
        m=b*b*b+s*s*s+g*g*g;
        if(n==m)
            cout<     }
}


24.完全数


如果一个数恰好等于它的因子之和,则该数为“完全数”。如:6的因子是1、2、3,而6=1+2+3.所以6是完全数。试求出1000以内所有的完全数。
#include
using namespace std;
void main()
{
    int n,a,sum=0;
    for(n=1;n<=1000;n++)
    {
        for(a=1;a         {
            if(n%a==0) sum=sum+a;
        }
        if(n==sum)
        {
            cout<             for(a=1;a                 if(n%a==0)
                    cout<             cout<         }
        sum=0;
    }
}


25.亲密数#####


如果整数A的全部因子(包括1,不包括A本身)之和等于B,且整数B的全部因子(包括1,不包括B本身)之和等于A,则将整数A和B称为亲密数。求3000以内的全部亲密数。
#include
using namespace std;
void main()
{
    int i,j,a,b,count1=0,count2=0;
    for(a=1;a<=3000;a++)
    {
        for(i=1;i<=a/2;i++)
            if(a%i==0)    count1+=i;
        b=count1;
        count1=0;
        for(j=1;j<=b/2;j++)
            if(b%j==0)    count2+=j;
        if(count2==a)
            cout<     }
}


26.自守数#####


自守数是指一个数的平方的尾数等于该数自身的自然数。
例如:252=625        762=5776    93762=87909376
求200000以内的自守数。

27.回文数


打印所有不超过n(取n<256)的,其平方具有对称性的数(也称回文数)。
#include
#include
using namespace std;
void main()
{
    int n,i,j,k=0,t=1,m[6];
    cout<<"原数     平方后的数"<     for(i=1;i<256;i++)
    {
        n=i*i;
        for(j=1;n!=0;j++)
        {
            m[j]=n%10;
            n/=10;
        }
        for(i=1;i         {
            k+=m[i]*t;
            t*=10;
        }
        if(k==i*i)
            cout<     }
}


28.求具有abcd=(ab+cd)2性质的四位数。


3025这个数具有一种独特的性质:将它平分为两段,即30和25,使之相加后求平方,即(30+25)2,恰好等于3025本身。请求出具有这样性质的全部四位数。
#include
using namespace std;
void main()
{
    int n,m,a,b;
    for(n=1000;n<10000;n++)
    {
        a=n/100;
        b=n%100;
        m=(a+b)*(a+b);
        if(n==m)
            cout<     }
}


29.求素数


求1000以内的所有素数。
#include
using namespace std;
void main()
{
    int n,i,count=0,f;
    for(n=2;n<1000;n++)
    {
        for(f=0,i=1;i             if(n%i==0) f++;
        if(f==1)
        {
            cout<             count++;
            if(count%15==0)    cout<         }
    }
}


30.哥德巴赫猜想


验证:2000以内的正偶数都能够分解为两个素数之和(即验证哥德巴赫猜想对2000以内的正偶数都成立)。
#include
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             if(isprime(i)==1&&isprime(n-i)==1)
            {
                cout<                 count++;
                if(count%5==0) cout<                 break;
            }
}


31.可逆素数


求四位的可逆素数。可逆素数即:一个素数将其各位数字的顺序倒过来构成的反序数也是素数。
#include
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<             count++;
            if(count%5==0) cout<         }
    }
}


32.回文素数


求不超过1000的回文素数。
#include
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<             count++;
            if(count%5==0) cout<         }
    }
}


33.要发就发


“1898--要发就发”。今年是1993年,现将不超过1993的所有素数从小到大排成第一行,第二行上的每个数都等于它“右肩”上的素数与“左肩”上的素数之差。请编程求出:第二行数中是否存在这样的若干个连续的整数,它们的和恰好是1898?假如存在的话,又有几种这样的情况?
第一行:2    3    5    7    11    13    17……1979    1987    1993
第二行:     1        2        2        4         2         4……         8          6    

34.素数幻方


求四阶的素数幻方,即在一个4X4的矩阵中,每一格填入一个数字,使得每一行、每一列和两条对角线上的4位数所组成的四位数,均为可逆素数。

35.百钱买百鸡问题


      公元前5世纪,我国古代数学家张丘建在《算经》一书中提出了“百鸡问题”:鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一。百钱买百鸡,问鸡翁、鸡母、鸡雏各几何?
#include
#include
using namespace std;
int main()
{
    int j,i,k;
    cout<<"公鸡     母鸡     小鸡"<     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<         }
}


36、爱因斯坦的数学题


爱因斯坦出了一道这样的数学题:有一条长阶梯,若每步跨2阶,则最最后剩一阶,若每步跨3 阶,则最后剩2阶,若每步跨5阶,则最后剩4阶,若每步跨6阶则最后剩5阶。只有每次跨7阶,最后才正好一阶不剩。请问这条阶梯共有多少阶?
#include
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<<"台阶数="< }


37.换分币


用一元人民币兑换成1分、2分和5分硬币,共有多少种换法?
#include
#include
using namespace std;
int main()
{
    int j,i,k;
    cout<<"一分     两分     五分"<     for(i=0;i<=20;i++)
        for(j=0;j<=50;j++)
        {
            k=100-5*i-2*j;
            if(k>=0)
                cout<         }
}


38.年龄几何


张三、李四、王五、刘六的年龄成一等差数列,他们四人的年龄相加是26,相乘是880,求以他们的年龄为前4项的等差数列的前20项。
#include
#include
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<     cout< }


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


   分别使用辗转相除法;数学上的试探方法完成。
#include
using namespace std;
void main()
{
       int n,m,gcd,lcm,temp;
       cout<<"请输入两个自然数"<        cin>>n>>m;
       if(n        {
        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<<"最大公约数为:"<        cout<<"最小公倍数:"< }
 

你可能感兴趣的:(C++基础算法,蓝桥杯,c++)