每日一练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;
}

测试结果:

相关推荐
苏小瀚1 小时前
算法---位运算
java·算法
Code小翊1 小时前
归并排序基础理解
数据结构·算法·排序算法
.小小陈.1 小时前
数据结构2:单链表
c语言·开发语言·数据结构·笔记·学习方法
草莓工作室1 小时前
数据结构4:线性表3-链式存储的线性表
数据结构
雾时之林1 小时前
数据结构--单链表
数据结构
Camel卡蒙1 小时前
数据结构——二叉搜索树Binary Search Tree(介绍、Java实现增删查改、中序遍历等)
java·开发语言·数据结构
2401_841495641 小时前
【数据结构】基于Floyd算法的最短路径求解
java·数据结构·c++·python·算法··floyd
立志成为大牛的小牛1 小时前
数据结构——二十三、并查集的终极优化(王道408)
开发语言·数据结构·笔记·学习·程序人生·考研
珊珊而川1 小时前
SAUP 算法
算法
.YM.Z1 小时前
数据结构——链表(二)
数据结构·链表