每日一练2023.11.27———连续因子【PTA】

题目要求:

一个正整数 N 的因子中可能存在若干连续的数字。例如 630 可以分解为 3×5×6×7,其中 5、6、7 就是 3 个连续的数字。给定任一正整数 N,要求编写程序求出最长连续因子的个数,并输出最小的连续因子序列。

输入格式:

输入在一行中给出一个正整数 N(1<N<231)。

输出格式:

首先在第 1 行输出最长连续因子的个数;然后在第 2 行中按 因子1*因子2*......*因子k 的格式输出最小的连续因子序列,其中因子按递增顺序输出,1 不算在内。

输入样例:

复制代码
630

输出样例:

复制代码
3
5*6*7

思路:

1.根据以下代码,先将输入n的因子放到一个数组里面

cpp 复制代码
for(int i = 2; i < sqrt(n) + 1; i ++)
{
     if(n % i == 0)
         a[q ++] = i;
}
if(q == 0)
     a[q ++] = n;

2.q代表n的因子的个数,遍历这些因子看是否满足相邻

3.判断因子之间是否相差1,即相邻,如果是则继续进行判断,如果不是跳出循环,从第二个因子后面进行判断

4.如果满足相邻,将相邻数*到一起放到sum里面

5.如果sum是n的因子则进行t++来统计连续因子个数,与max进行比较,更新max,并且记录第一个因子的位置i,如果sum不是n的因子则跳出循环

6.按输出要求进行输出

代码:

cpp 复制代码
#include <bits/stdc++.h>

using namespace std;

#define N 10000

int main()
{
    int n;
    int q = 0;
    int a[N];
    cin >> n;
    for(int i = 2; i < sqrt(n) + 1; i ++)
    {
        if(n % i == 0)
            a[q ++] = i;
    }
    if(q == 0)
        a[q ++] = n;
    int max = 1;
    int sum;
    int t;
    int y = 0;
    for(int i = 0; i < q; i ++)
    {
        sum = a[i];
        t = 1;
        for(int j = i + 1; j < q; j ++)
        {
            if(a[j] == a[j - 1] + 1)
            {
                sum *= a[j];
                if(n % sum == 0)
                {
                    t ++;
                    if(t > max)
                    {
                        max = t;
                        y = i;
                    }
                }
                else 
                    break;
            }
            else
                break;
        }
    }
    cout << max << endl;
    for(int k = y; k < y + max; k ++)
       if(k != max + y - 1)
             cout << a[k] << "*";
         else
             cout << a[k] << endl;
    return 0;
}

测试结果:

相关推荐
爱睡懒觉的焦糖玛奇朵5 小时前
【从视频到数据集:焦糖玛奇朵的魔法工具使用说明】
人工智能·python·深度学习·学习·算法·yolo·音视频
Runawayliquor5 小时前
opbase:CANN 所有算子的公共地基
大数据·数据库·人工智能·算法
徐安安ye5 小时前
FlashAttention 为什么对序列长度这么“敏感”?
人工智能·算法
潜创微科技5 小时前
IT6520:USB‑C 转 MIPI 芯片方案 4K@120Hz 高清显示
c语言·开发语言
kyle~6 小时前
机器视觉---熔池相机(穿透强光的视觉感知)
c++·数码相机·计算机视觉·机器人·焊接机器人
宏笋6 小时前
C++ Coroutines(协程) 详解
c++
王老师青少年编程7 小时前
csp信奥赛C++高频考点专项训练之前缀和&差分 --【一维前缀和】:求区间和
c++·前缀和·csp·高频考点·信奥赛·求和区间和
黎阳之光7 小时前
黎阳之光:以视频孪生重构智能监盘,为燃机打造新一代智慧电厂大脑
大数据·人工智能·算法·安全·数字孪生
绝知此事7 小时前
【算法突围 02】树形结构与数据库索引:树形结构与数据库索引:从 BST 到 B+ 树的演化与 MySQL 优化
数据库·mysql·算法·面试·b+树
kyle~7 小时前
机器人时间链路---工程流程示例
c++·3d·机器人·ros2