2019天梯赛练习题(L1专项练习)
水仙花数是指一个N位正整数(N≥3),它的每个位上的数字的N次幂之和等于它本身。例如:1。 本题要求编写程序,计算所有N位水仙花数。
输入样例:
3
输出样例:
153
思路:遍历100-999,每次都按题意检测一下是否满足,满足则输出,但是这题坑点在不能直接用pow()函数,具体的可以百度pow()函数,主要是它调用的是double 类型参数,会导致精度转换的时候出现问题(个人编译是这样的,
370
371
407
输入3会少了153这个答案),自己手写一个power()函数就可以了。
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
using namespace std;
typedef long long LL;
const int maxn=;
int power(int x,int y)
{
int i=,a=;
for(int i=;i<y;i++)
a=a*x;
return a;
}
int main()
{
int n;
cin>>n;
int l=power(,n-),r=power(,n);
// cout<<l<<" "<<r<<endl;
for(int i=l;i<r;i++)
{
int t=i;
int sum=;
while(t)
{
sum+=power(t%,n);
t/=;
}
if(sum==i)
cout<<i<<endl;
}
return ;
}
一个矩阵元素的“鞍点”是指该位置上的元素值在该行上最大、在该列上最小。
本题要求编写程序,求一个给定的n阶方阵的鞍点。
输入样例1:
4
1 7 4 1
4 8 3 6
1 6 1 2
0 7 8 9
输出样例1:
2 1
输入样例2:
2
1 7
4 1
输出样例2:
NONE
思路:预处理出来每行的最大值,每列的最小值。然后遍历一遍,看两者是否同时满足就可以了。
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
using namespace std;
typedef long long LL;
const int maxn=;
int n;
int a[maxn][maxn];
int maxx[maxn],minn[maxn];
bool flag1=true;
int main()
{
cin>>n;
for(int i=;i<n;i++)
for(int j=;j<n;j++)
cin>>a[i][j];
for(int i=;i<n;i++)
{
maxx[i]=a[i][];
minn[i]=a[][i];
for(int j=;j<n;j++)
{
maxx[i]=max(maxx[i],a[i][j]);
minn[i]=min(minn[i],a[j][i]);
}
}
for(int i=;i<n;i++)
{
for(int j=;j<n;j++)
{
if(a[i][j]==maxx[i]&&a[i][j]==minn[j])
{
cout<<i<<" "<<j<<endl;
flag1=false;
}
}
}
if(flag1)
cout<<"NONE"<<endl;
return ;
}
黑洞数也称为陷阱数,又称“Kaprekar问题”,是一类具有奇特转换特性的数。
任何一个各位数字不全相同的三位数,经有限次“重排求差”操作,总会得到495。最后所得的495即为三位黑洞数。所谓“重排求差”操作即组成该数的数字重排后的最大数减去重排后的最小数。(6174为四位黑洞数。)
例如,对三位数207:
- 第1次重排求差得:720 - 27 = 693;
- 第2次重排求差得:963 - 369 = 594;
- 第3次重排求差得:954 - 459 = 495;
以后会停留在495这一黑洞数。如果三位数的3个数字全相同,一次转换后即为0。
任意输入一个三位数,编程给出重排求差的过程。
输入样例:
123
输出样例:
1: 321 - 123 = 198
2: 981 - 189 = 792
3: 972 - 279 = 693
4: 963 - 369 = 594
5: 954 - 459 = 495
思路:将这位数,拆开放到数组再生成重排的最大的值和最小的值,然后循环知道n = 495,注意题意给了“如果三位数的3个数字全相同,一次转换后即为0。”,所以值为0的时候也要跳出来。
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
using namespace std;
typedef long long LL;
const int maxn=;
int n;
int a[maxn];
int main()
{
cin>>n;
for(int t=;;t++)
{
a[]=n/;a[]=n/%;a[]=n%;
sort(a,a+);
int maxx=a[]*+a[]*+a[];
int minn=a[]*+a[]*+a[];
n=maxx-minn;
printf("%d: %d - %d = %d\n",t,maxx,minn,n);
if(n== || n==)
break;
}
return ;
}
7-4 简易连连看
本题要求实现一个简易连连看游戏模拟程序。
给定一个2的方阵网格游戏盘面,每个格子中放置一些符号。这些符号一定是成对出现的,同一个符号可能不止一对。程序读入玩家给出的一对位置(、(,判断这两个位置上的符号是否匹配。如果匹配成功,则将两个符号消为“*”并输出消去后的盘面;否则输出“Uh-oh”。若匹配错误达到3次,则输出“Game Over”并结束游戏。或者当全部符号匹配成功,则输出“Congratulations!”,然后结束游戏。
输入样例1:
2
I T I T
Y T I A
T A T Y
I K K T
11
1 1 1 3
4 2 4 3
3 1 4 2
2 2 1 2
3 1 2 4
4 4 3 1
2 1 3 4
3 3 1 4
4 1 2 3
2 4 3 2
1 1 2 2
输出样例1:
* T * T
Y T I A
T A T Y
I K K T
* T * T
Y T I A
T A T Y
I * * T
Uh-oh
* * * T
Y * I A
T A T Y
I * * T
Uh-oh
* * * T
Y * I A
* A T Y
I * * *
* * * T
* * I A
* A T *
I * * *
* * * *
* * I A
* A * *
I * * *
* * * *
* * * A
* A * *
* * * *
Congratulations!
输入样例2:
2
I T I T
Y T I A
T A T Y
I K K T
5
1 1 4 4
1 1 2 3
1 1 2 3
2 2 4 1
2 2 3 3
输出样例2:
Uh-oh
* T I T
Y T * A
T A T Y
I K K T
Uh-oh
Uh-oh
Game Over
题意:模拟即可,但注意这几个坑点,当全图不全为“*”时,选到了两个“*”也算错误;还有当已经全变好了,但是输入没结束是不用输出的。
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
using namespace std;
typedef long long LL;
const int maxn=;
int n,m;
char a[maxn][maxn];
int x,y,xx,yy;
bool flag1=true;
int main()
{
cin>>n;
for(int i=;i<=(*n);i++)
{
for(int j=;j<=(*n);j++)
{
cin>>a[i][j];
}
}
int t=*n**n;
cin>>m;
int cnt=;
while(m--)
{
cin>>x>>y>>xx>>yy;
if(cnt==)
{
cout<<"Game Over"<<endl;
break;
}
else
{
if(a[x][y]==a[xx][yy] && a[x][y]=='*')
{
bool flag2=true;
for(int i=;i<=(*n);i++)
{
for(int j=;j<(*n);j++)
{
if(a[i][j]!='*')
{
flag2=false;
break;
}
}
}
if(!flag2)
{
cnt++;
cout<<"Uh-oh"<<endl;
}
}
else if(a[x][y]==a[xx][yy])
{
a[x][y]='*';
a[xx][yy]='*';
// t-=2;
// if(!t)
bool flag3=true;
for(int i=;i<=(*n);i++)
{
for(int j=;j<(*n);j++)
{
if(a[i][j]!='*')
{
flag3=false;
break;
}
}
}
if(!flag3)
{for(int i=;i<=(*n);i++)
{
for(int j=;j<(*n);j++)
{
cout<<a[i][j]<<" ";
}
cout<<a[i][*n]<<endl;
}}
}
else
{
cnt++;
cout<<"Uh-oh"<<endl;
}
}
}
for(int i=;i<=(*n);i++)
{
for(int j=;j<(*n);j++)
{
if(a[i][j]!='*')
{
flag1=false;
break;
}
}
}
if(flag1)
cout<<"Congratulations!"<<endl;
return ;
}
当芸芸众生忙着在朋友圈中发照片的时候,总有一些人因为太帅而没有朋友。本题就要求你找出那些帅到没有朋友的人。
输入样例1:
3
3 11111 22222 55555
2 33333 44444
4 55555 66666 99999 77777
8
55555 44444 10000 88888 22222 11111 23333 88888
输出样例1:
10000 88888 23333
输入样例2:
3
3 11111 22222 55555
2 33333 44444
4 55555 66666 99999 77777
4
55555 44444 22222 11111
输出样例2:
No one is handsome
思路:需要判断一下朋友圈只有一个人的时候,这个人是没有朋友的,要注意。不然的话就把好友都放到有一个set 里面,然后查询的时候就在set 里面看有没有,如果有的话,要把结果也放到一个set 判断是否是多次输出。
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <map>
#include <set>
using namespace std;
typedef long long LL;
const int maxn=;
int n,m;
set<int>s;
set<int>ans;
int main()
{
scanf("%d",&n);
while(n--)
{
scanf("%d",&m);
int x;
if(m>=)
{
while(m--)
{
scanf("%d",&x);
s.insert(x);
}
}
else
scanf("%d",&x);
}
scanf("%d",&m);
int x;bool flag=false;
int a[maxn];
int i=;
while(m--)
{
scanf("%d",&x);
if(s.count(x)==)
{
// cout<<x<<endl;
if(ans.count(x)==)
a[i++]=x;
ans.insert(x);
flag=true;
}
}
if(!flag)
printf("No one is handsome\n");
else
{
for(int j=;j<i-;j++)
printf("%05d ",a[j]);
printf("%05d\n",a[i-]);
}
return ;
}
给定一个长度不超过10000的、仅由英文字母构成的字符串。请将字符重新调整顺序,按GPLTGPLT....
这样的顺序输出,并忽略其它字符。当然,四种字符(不区分大小写)的个数不一定是一样多的,若某种字符已经输出完,则余下的字符仍按GPLT
的顺序打印,直到所有字符都被输出。
输入样例:
pcTclnGloRgLrtLhgljkLhGFauPewSKgt
输出样例:
GPLTGPLTGLTGLGLL
思路:记录G,g,P,p,L,l,T,t的数量,然后循环输出即可。
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <map>
#include <set>
using namespace std;
typedef long long LL;
const int maxn=;
int n,m;
int main()
{
string s;
cin>>s;
int len=s.length();
int cnt1=,cnt2=,cnt3=,cnt4=;
for(int i=;i<len;i++)
{
if(s[i]=='G'||s[i]=='g')
cnt1++;
if(s[i]=='P'||s[i]=='p')
cnt2++;
if(s[i]=='L'||s[i]=='l')
cnt3++;
if(s[i]=='T'||s[i]=='t')
cnt4++;
}
while(cnt1> || cnt2> || cnt3> ||cnt4>)
{
if(cnt1>)
{
printf("G");
cnt1--;
}
if(cnt2>)
{
printf("P");
cnt2--;
}
if(cnt3>)
{
printf("L");
cnt3--;
}
if(cnt4>)
{
printf("T");
cnt4--;
}
}
printf("\n");
return ;
}
本题要求你计算A−B。不过麻烦的是,A和B都是字符串 —— 即从字符串A中把字符串B所包含的字符全删掉,剩下的字符组成的就是字符串A−B。
输入样例:
I love GPLT! It's a fun game!
aeiou
输出样例:
I lv GPLT! It's fn gm!
思路:getline 读行,然后把要删去的字符用set存,遍历目标字符串,看是否在set里面出现过,出现过就输出“ ”,否则正常输出。
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <map>
#include <set>
using namespace std;
typedef long long LL;
const int maxn=;
int n,m;
string s1,s2;
set<char>s;
int main()
{
getline(cin,s1);
getline(cin,s2);
int len=s2.length();
for(int i=;i<len;i++)
s.insert(s2[i]);
len=s1.length();
for(int i=;i<len;i++)
{
if(s.count(s1[i])==)
cout<<s1[i];
}
cout<<endl;
return ;
}
2019天梯赛练习题(L1专项练习)的更多相关文章
- 2019天梯赛练习题(L2专项练习)
7-2 列出连通集 (25 分) 给定一个有N个顶点和E条边的无向图,请用DFS和BFS分别列出其所有的连通集.假设顶点从0到N−1编号.进行搜索时,假设我们总是从编号最小的顶点出发,按编号递增的顺序 ...
- PAT天梯赛练习题——L3-007. 天梯地图(多边权SPFA)
L3-007. 天梯地图 时间限制 300 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 本题要求你实现一个天梯赛专属在线地图,队员输入自己学校 ...
- PAT天梯赛练习题 L3-002. 堆栈(线段树查询第K大值或主席树)
L3-002. 堆栈 时间限制 200 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 大家都知道“堆栈”是一种“先进后出”的线性结构,基本操作有 ...
- PAT天梯赛练习题 L3-010. 是否完全二叉搜索树(完全二叉树的判断)
L3-010. 是否完全二叉搜索树 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 将一系列给定数字顺序插入一个初始为空的二叉搜 ...
- PAT天梯赛练习题 L3-011. 直捣黄龙(多关键字SPFA+DFS)
L3-011. 直捣黄龙 时间限制 150 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 本题是一部战争大片 —— 你需要从己方大本营出发,一路 ...
- PAT天梯赛练习题 L2-013 红色警报(并查集+逆序加边)
L2-013. 红色警报 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 战争中保持各个城市间的连通性非常重要.本题要求你编写一 ...
- 天梯赛练习题L2-006. 树的遍历
题目链接 已知一棵树的后序遍历顺序和中序遍历顺序,求层次遍历的顺序: 树的四种遍历: 先序遍历:先访问根节点,再访问左子树,最后访问右子树 中序遍历:先访问左子树,再访问根节点,最后访问右子树 后序遍 ...
- PAT天梯赛练习题——L3-004. 肿瘤诊断(三维连通块并查集)
L3-004. 肿瘤诊断 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 在诊断肿瘤疾病时,计算肿瘤体积是很重要的一环.给定病灶 ...
- PAT天梯赛练习题——L3-005. 垃圾箱分布(暴力SPFA)
L3-005. 垃圾箱分布 时间限制 200 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 大家倒垃圾的时候,都希望垃圾箱距离自己比较近,但是谁 ...
随机推荐
- Android笔记---常用控件以及用法
这篇文章主要记录下Android的常用控件以及使用的方法,Android 给我们提供了大量的UI控件,合理地使用这些控件就可以非常轻松地编写出相当不错的界面,这些是Android学习的基础,没有什么业 ...
- c# dynamic 无法创建 泛型变量的问题
IMyClass<T> FunctionA<T>( object arg_obj) { dynamic dyObj = arg_obj; return new MyClass& ...
- 鸟哥私房菜基础篇:学习 Shell Scripts习题
猫宁!!! 参考链接:http://cn.linux.vbird.org/linux_basic/0340bashshell-scripts.php 鸟哥是为中国信息技术发展做出巨大贡献的人. 1-请 ...
- C++ 的输出格式
0 在C语言中很简单对输出的要求,然而在C++中有一丝的麻烦. 在下面的代码中所需要的是 #include<iostream> 基本输入/输出库 #include<iomanip&g ...
- hdu1811 Rank of Tetris 并查集+拓扑排序
#include <stdio.h> #include <string.h> #include <vector> #include <queue> us ...
- Steps to Resolve the Database JAVAVM Component if it Becomes INVALID After Applying an OJVM Patch
11.2.0.2升级到11.2.0.4 memory_target 设置过小,只有800M. 导致jserver jave virtual machine 组件无法安装, 建议升级之前至少memory ...
- yum卸载遇到的问题--待解决
系统版本是 [root@master ~]# uname -a Linux master -.el6.x86_64 # SMP Sun Nov :: EST x86_64 x86_64 x86_64 ...
- discuz x2.5用户注册后邮箱认证后无法收到邮件或者直接进垃圾箱
又是一个周末,jquery特效继续折腾我那discuz论坛,我开启了个邮箱验证,恶意注册的太恶心了,没有办法. 能稍微屏蔽点,但是问题来了,据亲们反应,无法收到验证邮件,或者有时间直接进入垃圾箱,这个 ...
- P1179 数字统计
题目描述 请统计某个给定范围[L, R]的所有整数中,数字 2 出现的次数. 比如给定范围[2, 22],数字 2 在数 2 中出现了 1 次,在数 12 中出现 1 次,在数 20 中出 现 1 次 ...
- P1482 Cantor表(升级版)
题目描述 现代数学的著名证明之一是Georg Cantor证明了有理数是可枚举的.他是用下面这一张表来证明这一命题的: 1/1 1/2 1/3 1/4 1/5 … 2/1 2/2 2/3 2/4 … ...