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

每日一练2023.11.27———连续因子【PTA】_第1张图片

题目链接:L1-006 连续因子​​​​​​​

题目要求:

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

输入格式:

输入在一行中给出一个正整数 N(1

输出格式:

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

输入样例:

630

输出样例:

3
5*6*7

思路:

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

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.按输出要求进行输出

代码:

#include 

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;
}

测试结果:

每日一练2023.11.27———连续因子【PTA】_第2张图片

你可能感兴趣的:(每日一题C/C++,算法,数据结构,PTA,C++,C语言,计算机语言,每日一练)