蓝桥杯练习6

蓝桥杯学习记录

一、测试练习:

特殊回文数:

问题描述:
123321是一个非常特殊的数,它从左边读和从右边读是一样的。

输入一个正整数n, 编程求所有这样的五位和六位十进制数,满足各位数字之和等于n 。

样例输入: 输入一行,包含一个正整数n。

52

样例输出:按从小到大的顺序输出满足条件的整数,每个整数占一行。

899998
989989
998899

数据规模和约定

1<=n<=54

解题思路:

代码:

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

int main()
{
    vector<int> v;
    int n;
    cin>>n;
    for(int a = 1; a <= 9; a++){
        for(int b = 0; b <= 9; b++){
            for(int c = 0; c <= 9; c++)
            {
                if((2*a + 2*b + c )==n)
                    cout<<a<<b<<c<<b<<a<<endl;
                if((2*a + 2*b + 2*c) == n)
                    v.push_back(a*100000 + b*10000 + c*1000 + c*100 + b*10 + a);
            }
        }
    }
    for(int i = 0; i < v.size();i++)
        cout<<v[i]<<endl;

}

二、视频学习:

学习链接:https://www.bilibili.com/video/BV1jE411g76D?t=3095&p=9

学习内容:标准STL库——

函数功能时间复杂度
insert插入一个元素O(log n)
erase删除一个元素O(log n)
count统计集合中某个元素的个数O(log n)
size获取元素个数O(1)
clear清空O(n)

遍历的迭代器用法

for(set<T>::iterator it = v.begin(); it != v.end(); it++){
    cout<< *it<<endl;
}

(遍历set是从大到小的,set会自动进行排序)

set存储结构体需要重载"<"运算符

练习代码:

#include <iostream>
#include <set>
using namespace std;
struct Point{
    int x,y;
    bool operator<(const Point &rhs) const{//rhs有右操作数的意思
    if (x == rhs.x)
        return y < rhs.y;
    else
        return x < rhs.x;
    }
};
int main()
{
    int a[6] = {10, 2, 3, 4, 2, 10};
    set<int> x;
    for(int i=0; i < 6; i++){
        x.insert(a[i]);
    }
    //遍历——迭代器的用法
    for(set<int>::iterator it = x.begin(); it != x.end(); it++){
        cout<< *it<<" ";
    }//2 3 4 10
    cout<<endl<<x.count(2)<<" "<<x.size()<<endl;// 1 4
    x.erase(10);
    for(set<int>::iterator it = x.begin(); it != x.end(); it++){
        cout<< *it<<" ";
    }// 2 3 4
    x.clear();//释放内存
    int n;
    set<Point> v;
    cout<<endl<<"请输入小数的个数"<<endl;
    cin>>n;
    cout<<"请输入小数"<<endl;
    for(int i = 0; i < n; i++){
        Point temp;
        cin>>temp.x>>temp.y;
        v.insert(temp);
    }
    for(set<Point>::iterator is = v.begin(); is != v.end(); is++)
        cout << is -> x << " " << is -> y<<endl;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值