小白书暴力之除法,最大乘积,分数拆分,双基回文数

本文深入探讨了编程领域的核心概念,包括数据结构、算法、测试、版本控制等关键主题。从基本的数据结构如数组、链表到高级算法如深度学习、强化学习,再到现代软件开发实践,如DevOps和持续集成,提供了全面的技术指南。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

除法;输入正整数n,按从小到大的顺序输出所有形如abcde/fghij=n的表达式,其中a~j恰好为数字0~9的一个排列,2<=n<=79.

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<string>
#include<cctype>
#include<cmath>
#include<map>
#include<set>
#include<vector>
#include<queue>
#include<stack>
#include<ctime>
#include<algorithm>
#define LL long long
using namespace std;
const int N=1001;
int re[20];
void test(int num)
{
   int len=0;
   while(len<5)
   {
       re[num%10]++;
       num/=10;
       len++;
   }
}
int main()
{
    int n;
    while(cin>>n)
    {
       int sum1,sum2;
       for(sum1=1234;sum1<=98765;sum1++)
       {
           if(sum1%n==0)
           {
               memset(re,0,sizeof(re));
               sum2=sum1/n;
               test(sum1);
               test(sum2);
               int i;
               for(i=0;i<10;i++)
                if(re[i]!=1)
                break;
                if(i==10)
                printf("%05d/%05d=%d\n",sum1,sum2,n);
           }
       }
    }
    return 0;
}
最大乘积:输入n个元素组成的序列S,你需要找出一个乘积最大的连续子序列。如果这个最大的乘积不是正数,应输出-1.

1<=n<=18,-10<=Si<=10.

注意要用LL,做题之前必做三件事,分析时间复杂度,分析数组大小,分析数据大小。

这题即可以枚举起点和终点,也可以枚举个数。

#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<cctype>
#include<algorithm>
#include<iostream>
#define LL long long
using namespace std;
int main()
{
    LL a[20];
    int n;
    while(cin>>n)
    {
        for(int i=0;i<n;i++)
            cin>>a[i];
        LL sum=-1;
        LL temp=1;
       /* for(int i=1;i<=n;i++)
        {
            for(int j=0;j<n;j++)
            {
                for(int k=j;k-j<i;k++)
                {
                    temp*=a[k];
                }
                sum=max(sum,temp);
                temp=1;
            }
        }*/
        for(int i=0;i<n;i++)
        {
             for(int j=i;j<n;j++)
            {
                for(int k=i;k<=j;k++)
                temp*=a[k];
                 sum=max(sum,temp);
                temp=1;
            }
        }
        if(sum<=0)
            sum=-1;
        cout<<sum<<endl;
    }

}
输入正整数k,找到所有的正整数x>=y,使得1/k=1/x+1/y。

这题我是想了一会想到的y的范围,而没有想到把等式转化后带入不等式求出范围,这高中最基本的

思路竟然忘记了。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<string>
#include<cctype>
#include<cmath>
#include<map>
#include<set>
#include<vector>
#include<queue>
#include<stack>
#include<ctime>
#include<algorithm>
#include<climits>
#define LL long long
using namespace std;
const int N=1001;
int main()
{
    int k;
    while(cin>>k)
    {
        int sum=0;
       for(int y=k+1;y<=2*k;y++)
        if(k*y%(y-k)==0)
            sum++;
       cout<<sum<<endl;
       for(int y=k+1;y<=2*k;y++)
        if(k*y%(y-k)==0)
        printf("1/%d = 1/%d + 1/%d\n",k,k*y/(y-k),y);
    }
    return 0;
}
双基回文数:如果一个正整数n至少在俩个不同的进位制b1和b2下都是回文数(2<=b1,b2<=10),则称n是双基回文数(注意,回文数不能包含前导零)。

输入正整数S<1e6,输出比S大的最小双基回文数。双基回文数比较密集,直接暴力枚举就行。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<string>
#include<cctype>
#include<cmath>
#include<map>
#include<set>
#include<vector>
#include<queue>
#include<stack>
#include<ctime>
#include<algorithm>
#include<climits>
#define LL long long
using namespace std;
const int N=1001;
int main()
{
    int n;
    while(cin>>n)
    {
       while(1)
       {
           n++;
           int sum=0;
           for(int i=2;i<=10;i++)
            {
                int flag=1;
                int a[100];
                int len=0;
                int tem=n;
                while(tem!=0)
                {
                    a[len]=tem%i;
                    tem/=i;
                    len++;
                }
                for(int j=0;j<len/2;j++)
                {
                    if(a[j]!=a[len-1-j])
                    {
                        flag=0;
                        break;
                    }
                }
                if(flag)
                    sum++;
                if(sum==2)
                   break;
            }
            if(sum==2)
                break;
       }
       cout<<n<<endl;
    }
    return 0;
}





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值