PTA 天梯赛 L1-006 连续因子 【C++ Vector动态数组(详)】【Python】

C++

知识点:

vector

#include<vector>

一种容器,或者理解为一种“向量”,一般被称为动态数组,其长度可以根据需要改变

定义:vector<储存的类型> 名

也可以定义vector数组 vector<储存的类型> 名[n]  (n为该数组长度)

常用成员函数:

size()//返回返回容器中元素个数

begin()//返回头部迭代器
end()//返回尾部+1迭代器
//通常用于遍历,但是不如下标

rbegin()//返回逆首部迭代器
rend()//返回逆尾部-1迭代器

//通常用于逆序排序eg:
// 使用 sort 对 vector 进行排序,传入逆迭代器作为参数
    sort(vec.rbegin(), vec.rend());

front()//返回首个元素
back()//返回尾部元素

push_back()//在末尾添加一个元素
emplace_back()//和push_back()是一样的作用
pop_back()//弹出最后一个元素

empty()//判断是否为空
insert()//在指定位置插入元素
erase()//在指定位置删除元素
clear()//清空容器

遍历:

1.迭代器遍历,(注意得到的是地址,输出要进行取地址)

//顺序
for(it=v.begin();it!=v.end();it++){
		cout<<*it<<' ';
	} 
//逆序输出
for(it=v.rbegin();it!=v.rend();it++){
		cout<<*it<<' ';
	}

2.下标遍历(常用)

for(int i=0;i<v.size();i++){
		cout<<v[i]<<' ';
	}

3.foreach(简洁)(不支持逆序)

for(int c:v){
		cout<<c<<' ';
	}

排序:

sort(v.begin(),v.end());//排完后输出为升序
sort(v.rbegin(),v.rend());//排完后降序
reverse(v.begin(),v.end());//倒置

本题代码:

#include <iostream>
#include <vector>
#include <cmath>
using namespace std;

// 判断是否为质数
// 1不是质数,2是质数
bool isPrime(int n) {
    if (n <= 1) return false;
    for (int i = 2; i <= sqrt(n); ++i) {
        if (n % i == 0) return false;
    }
    return true;
}

// 求连续因子的个数和最小连续因子序列
void findConsecutiveFactors(int N) {
    // 边界情况:N 为质数
    if (isPrime(N)) {
        cout << "1" << endl;
        cout << N << endl;
        return;
    }
    int maxLength = 0;
    vector<int> factors;
    //定义了一个名为 factors 的向量,其中存储的元素类型为整数 (int)。这个向量将用于存储最小连续因子序列
    // 从 2 开始尝试作为起始因子
    for (int i = 2; i * (i + 1) <= N; ++i) {
        long long product = 1;
        int length = 0;
        for (int j = i; product <= N; ++j) {
            product *= j;
            length++;
            if (N % product == 0 && length > maxLength) {
                maxLength = length;
                factors.clear();
                //清空 factors 向量,以便重新填充新的最小连续因子序列
                for (int k = i; k < i + length; ++k) {
                    factors.push_back(k);
                    //将新的连续因子添加到 factors 向量的末尾
                }
            }
        }
    }
    cout << maxLength << endl;
    for (int i = 0; i < factors.size(); ++i) {
        cout << factors[i];//访问下标输出
        if (i < factors.size() - 1) {
            cout << "*";
        }
    }
    cout << endl;
}

int main() {
    int N;
    cin >> N;
    
    findConsecutiveFactors(N);
    
    return 0;
}

Python

# 连续因子
import math


def isprime(n):
    if 0 < n <= 1:
        return False
    else:
        for f in range(2, int(math.sqrt(n))+1):
            if n % f == 0:
                return False
    return True


N = int(input())
if isprime(N):
    print(1)
    print(N)
else:
    i, max_length = 2, 0
    lst = []
    # 以i为起始因子
    while i * (i + 1) <= N:
        j, length, sum1 = i, 0, 1
        while sum1 < N:
            sum1 *= j
            length += 1
            if N % sum1 == 0 and length > max_length:
                max_length = length
                # 重置列表
                lst = []
                for k in range(i, i + length):
                    lst.append(k)
            j += 1
        i += 1
    print(max_length)
    for i in range(len(lst) - 1):
        print(lst[i], end='*')
    print(lst[len(lst) - 1])
  • 28
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
根据提供的引用内容,这段代码是用来统计输入数字中奇数和偶数的个数的。代码中使用循环遍历输入的数字,通过对2取模运算来判断数字是奇数还是偶数,然后分别对奇数和偶数的计数变量进行加一操作。循环结束后,输出奇数计数变量和偶数计数变量的值,中间用空格隔开。\[1\]\[2\]\[3\] 这段代码可以用来解决团体程序设计天梯-练习集 L1-022 奇偶分家的问题。 #### 引用[.reference_title] - *1* [PTA团队天梯║L1-022 奇偶分家](https://blog.csdn.net/m0_46492118/article/details/114481127)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [PAT团队程序设计天梯-习题集L1-022 奇偶分家](https://blog.csdn.net/qq_38234015/article/details/81291913)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [团体程序设计天梯-练习集 L1-022 奇偶分家 (10分)(C语言)](https://blog.csdn.net/Baridhu/article/details/109899606)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值