蓝桥杯——练习(2.27)
蓝桥杯——练习(2.27)
基础练习 特殊回文数
题目链接:http://lx.lanqiao.cn/detail.page?submitid=5515856
资源限制
时间限制:1.0s 内存限制:512.0MB
问题描述
123321是一个非常特殊的数,它从左边读和从右边读是一样的。
输入一个正整数n, 编程求所有这样的五位和六位十进制数,满足各位数字之和等于n 。
输入格式
输入一行,包含一个正整数n。
输出格式
按从小到大的顺序输出满足条件的整数,每个整数占一行。
样例输入
52
样例输出
899998
989989
998899
数据规模和约定
1<=n<=54。
解题思路
-
分析本题目,特殊回文数就是从左边读和从右边读都是一样的。
-
题目要求输出所有的这样的五位和六位十进制数。
-
可以利用枚举来进行判断是否符合题目要求,用n表示输入的数,也就是各位数的和为n。
-
left表示左边部分,right表示右边部分,数组a存放数据的每一位数,Num表示每次的数,用变量t来存放每一次的Num值。
-
先判断t是五位数还是六位数,如果是五位数,将t的每一位取出放到a中,然后判断每位的和是否与n相等,如果和n相等,left=a[0]*10+a[1];right=a[4] *10+a[3],接着判断left与right是否相等,相等则输出Num;
-
如果是六位数,将每一位放到a中,判断六位的和是否与n相等,如果相等,left=a[0] * 100+a[1] * 10+a[2],right=a[5] * 100+a[4] * 10+a[3];如果left与right相等,输出Num的值。
代码
#include<iostream>
using namespace std;
int main()
{
int n,left,right,i;
int t=0;
int Num=10000;
int a[6];
cin>>n;
for(Num;Num<1000000;Num++)
{
i=0;
t=Num;
if(t<100000)
{
while(t)
{
a[i++]=t%10;
t/=10;
}
if(a[0]+a[1]+a[2]+a[3]+a[4]==n)
{
left=a[0]*10+a[1];
right=a[4]*10+a[3];
if(left==right)
{
cout<<Num<<endl;
}
}
}
else
{
while(t)
{
a[i++]=t%10;
t/=10;
}
if(a[0]+a[1]+a[2]+a[3]+a[4]+a[5]==n)
{
left=a[0]*100+a[1]*10+a[2];
right=a[5]*100+a[4]*10+a[3];
if(left==right)
{
cout<<Num<<endl;
}
}
}
}
return 0;
}
视频学习——使用sort排序练习
视频链接:https://www.bilibili.com/video/BV1jE411g76D?p=5
学习心得
-
使用sort函数需要引入头文件algorithm,round函数是四舍五入的,浮点数的绝对值用fabs函数,均在头文件cmath中,如果要使用这些函数,要引入头文件。
-
输出的时候用printf时,%lf和%f默认都是六位,与%.6f相同。输出的时候要注意行末空格的问题,先判断一下是不是最后一位,如果不是将数据打出并加上空格,如果是最后一位,直接输出数据即可,最后循环结束的时候,最好打印一下换行。
-
c风格字符串用strlen求字符串的长度,需要引入头文件cstring。
-
结构体排序的时候要保证每一位都能够进行比较。
题目练习 集合运算
题目链接:http://lx.lanqiao.cn/problem.page?gpid=T53
资源限制
时间限制:1.0s 内存限制:512.0MB
问题描述
给出两个整数集合A、B,求出他们的交集、并集以及B在A中的余集。
输入格式
第一行为一个整数n,表示集合A中的元素个数。
第二行有n个互不相同的用空格隔开的整数,表示集合A中的元素。
第三行为一个整数m,表示集合B中的元素个数。
第四行有m个互不相同的用空格隔开的整数,表示集合B中的元素。
集合中的所有元素均为int范围内的整数,n、m<=1000。
输出格式
第一行按从小到大的顺序输出A、B交集中的所有元素。
第二行按从小到大的顺序输出A、B并集中的所有元素。
第三行按从小到大的顺序输出B在A中的余集中的所有元素。
样例输入
5
1 2 3 4 5
5
2 4 6 8 10
样例输出
2 4
1 2 3 4 5 6 8 10
1 3 5
样例输入
4
1 2 3 4
3
5 6 7
样例输出
1 2 3 4 5 6 7
1 2 3 4
代码
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main()
{
int n,m,i;
int value;
vector<int> v1;
vector<int> v2;
vector<int> v3;
vector<int> v4;
vector<int> v5;
cin>>n;
for(i=0;i<n;i++)
{
cin>>value;
v1.push_back(value);
}
cin>>m;
for(i=0;i<m;i++)
{
cin>>value;
v2.push_back(value);
}
sort(v1.begin(),v1.end());
sort(v2.begin(),v2.end());
//求交集
set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v3));
if(v3.size()!=0)
{
for(i=0;i<v3.size();i++)
{
cout<<v3[i]<<" ";
}
cout<<endl;
}
//求并集
set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),inserter(v4,v4.begin()));
for(i=0;i<v4.size();i++)
{
cout<<v4[i]<<" ";
}
cout<<endl;
//求差集
set_difference(v1.begin(),v1.end(),v2.begin(),v2.end(),inserter(v5,v5.begin()));
for(i=0;i<v5.size();i++)
{
cout<<v5[i]<<" ";
}
return 0;
}