有趣的C++代码(中)

这是一个包含一系列使用C++编程解决的数学和逻辑问题集合,包括捕鱼和分鱼的分配问题、金鱼出售的递归计算、寻找特定条件的五位数、自然数的除法余数规律、四位数的反序数、车速计算、平方数组合以及阿姆斯特朗数、完全数、亲密数、回文数等数学概念的应用。这些问题展示了编程在解决数学问题中的应用和逻辑思维的重要性。
摘要由CSDN通过智能技术生成

14.捕鱼和分鱼

A、B、C、D、E五人在某天夜里合伙去捕鱼,到第二天凌晨时都疲惫不堪,于是各自找地方休息。日上三竿,A第一个醒来,他将鱼分为五份,把多余的一条鱼扔掉,拿走自己的一份。B第二个醒来,也将鱼分为五份,把多余的一条鱼扔掉,拿走自己的一份。一次醒来,C、D、E也按同样的方法拿鱼。问他们合伙至少捕了多少条鱼?
 

#include <iostream>
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<<"他们合伙至少捕了"<<n<<"条鱼"<<endl;
}

15.出售金鱼

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

#include <iostream>
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<<n<<endl;*/
	double n=11,i;//法二
	for(i=5;i>=2;i--)
	{
		n=(1/(1-1/i))*(n+1/i);
	}
	cout<<n<<endl;
   return 0;
}

16.有限五位数

个位数为6且能被3整除的五位数共有多少?

#include <iostream>
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整除的五位数共有"<<count<<"个"<<endl;
}

17.8除不尽的自然数

一个自然数被8除余1,所得的商被8除也余1,再将第二次的商被8除后余7,最后得到一个商为a。又知这个自然数被17除余4,所得的商被17除余15,最后得到一个商是a的2倍。求这个自然数。

#include <iostream>
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<<endl;
            break;
        }
}

18四位反序数

设N是一个四位数,它的9倍恰好是其反序数,求N。反序数就是将整数的数字倒过来形成的整数。例如:1234的反序数是4321.

#include <iostream>
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的值为:"<<n<<endl;
    }
}

19.求车速

一辆以固定速度行驶的汽车,司机在上午10点看到里程表上的读数是一个对称数(即这个数从左向右读和从右向左读是完全一样的),为95859.两小时后里程表上出现了一个新的对称数。问该车的速度是多少?新的对称数是多少?

#include <iostream>
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<<"该车的速度为:"<<speed<<endl;
            cout<<"新的对称数是:"<<m<<endl;
            break;
        }
    }
}

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

已知两个平方三位数abc和xyz,其中a、b、c、x、y、z未必是不同的;而ax、by、cz是三个平方二位数。请编程求三位数abc和xyz。

#include <iostream>
#include <cmath>
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<<"可能的两个平方三位数是:"<<endl;
    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<<i*i<<"和"<<t*t<<endl;
        }
}

21.阿姆斯特朗数


如果一个正整数等于其各个数字的立方和,则该数称为阿姆斯特朗数(亦成为自恋性数)。如407=43+03+73就是一个阿姆斯特朗数,试编程求1000以内的所有阿姆斯特朗数。

#include <iostream>
#include<cmath>
using namespace std;
void main()
{
    int n,g,s,b,m;
    cout<<"1000以内的所有阿姆斯特朗数有:"<<endl;
    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<<n<<"  ";
    }
}

22.完全数


如果一个数恰好等于它的因子之和,则该数为“完全数”。如:6的因子是1、2、3,而6=1+2+3.所以6是完全数。试求出1000以内所有的完全数。

#include<iostream>
using namespace std;
void main()
{
    int n,a,sum=0;
    for(n=1;n<=1000;n++)
    {
        for(a=1;a<n;a++)
        {
            if(n%a==0) sum=sum+a;
        }
        if(n==sum)
        {
            cout<<n<<"的因子是";
            for(a=1;a<n;a++)
                if(n%a==0)
                    cout<<a<<" ";
            cout<<endl;
        }
        sum=0;
    }
}

23.亲密数#####


如果整数A的全部因子(包括1,不包括A本身)之和等于B,且整数B的全部因子(包括1,不包括B本身)之和等于A,则将整数A和B称为亲密数。求3000以内的全部亲密数。

#include <iostream>
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<<a<<"和"<<b<<endl;
    }
}

24.回文数


打印所有不超过n(取n<256)的,其平方具有对称性的数(也称回文数)。

#include <iostream>
#include <iomanip>
using namespace std;
void main()
{
    int n,i,j,k=0,t=1,m[6];
    cout<<"原数     平方后的数"<<endl;
    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<j-1;i++)
        {
            k+=m[i]*t;
            t*=10;
        }
        if(k==i*i)
            cout<<setw(4)<<i<<setw(6)<<i*i<<endl;
    }
}

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


3025这个数具有一种独特的性质:将它平分为两段,即30和25,使之相加后求平方,即(30+25)2,恰好等于3025本身。请求出具有这样性质的全部四位数。


#include <iostream>
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<<n<<endl;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值