• GPLT团体程序设计天梯赛练习集 L1011~L1020


    L1-011 A-B (20 分)


    本题要求你计算\(A−B\)。不过麻烦的是,\(A\)\(B\)都是字符串 —— 即从字符串\(A\)中把字符串\(B\)所包含的字符全删掉,剩下的字符组成的就是字符串\(A−B\)


    输入格式

    输入在\(2\)行中先后给出字符串\(A\)\(B\)。两字符串的长度都不超过\(10^4\),并且保证每个字符串都是由可见的 ASCII 码和空白字符组成,最后以换行符结束。


    输出格式

    在一行中打印出\(A−B\)的结果字符串。


    输入样例

    I love GPLT!  It's a fun game!
    aeiou
    

    输出样例

    I lv GPLT!  It's  fn gm!
    

    作者:陈越
    单位:浙江大学
    代码长度限制:16 KB
    时间限制:150 ms
    内存限制:64 MB



    数据很小,直接暴力即可;


    PZ.cpp

    #include<iostream>
    #include<algorithm>
    using namespace std;
    string A,B,ans;
    bool check(char ch){
    	for(int i=0;i<B.size();++i)
    		if(ch==B[i]) return 0;
    	return 1;
    }
    int main(){
    	getline(cin,A);
    	getline(cin,B);
    	for(int i=0;i<A.size();++i)
    		if(check(A[i])) ans+=A[i];
    	cout<<ans;
    	return 0;
    }
    






    L1-012 计算指数 (5 分)


    真的没骗你,这道才是简单题 —— 对任意给定的不超过 \(10\) 的正整数 \(n\),要求你输出 \(2^n\)。不难吧?


    输入格式

    输入在一行中给出一个不超过 \(10\) 的正整数 \(n\)


    输出格式

    在一行中按照格式 2^n = 计算结果 输出 \(2^n\) 的值。


    输入样例

    5
    

    输出样例

    2^5 = 32
    

    作者:陈越
    单位:浙江大学
    代码长度限制:16 KB
    时间限制:400 ms
    内存限制:64 MB



    这里使用了快速幂的模板(其实不需要);


    PZ.cpp

    #include<iostream>
    #include<algorithm>
    using namespace std;
    int pow(int x,int k){
    	int res=1;
    	while(k){
    		if(k&1) res=res*x;
    		x*=x;
    		k>>=1;
    	}
    	return res;
    }
    int main(){
    	int n; scanf("%d",&n);
    	printf("2^%d = %d",n,pow(2,n));
    	return 0;
    }
    






    L1-013 计算阶乘和 (10 分)


    对于给定的正整数N,需要你计算 \(S=1!+2!+3!+...+N!\)


    输入格式

    输入在一行中给出一个不超过\(10\)的正整数\(N\)


    输出格式

    在一行中输出\(S\)的值。


    输入样例

    3
    

    输出样例

    9
    

    作者:陈越
    单位:浙江大学
    代码长度限制:16 KB
    时间限制:400 ms
    内存限制:64 MB



    res代表\(i!\)


    PZ.cpp

    #include<cstdio>
    int main(){
    	int n; long long res=1,ans=1; 
    	scanf("%d",&n);
    	for(int i=2;i<=n;++i) ans=ans+(res*=i);
    	printf("%lld",ans);
    	return 0;
    }
    






    L1-014 简单题 (5 分)


    这次真的没骗你 —— 这道超级简单的题目没有任何输入。

    你只需要在一行中输出事实:This is a simple problem. 就可以了。


    输入样例


    输出样例

    This is a simple problem.
    

    作者:陈越
    单位:浙江大学
    代码长度限制:16 KB
    时间限制:400 ms
    内存限制:64 MB



    PZ.cpp

    #include<cstdio>
    int main(){
    	printf("This is a simple problem.");
    	return 0;
    }
    






    L1-015 跟奥巴马一起画方块 (15 分)


    美国总统奥巴马不仅呼吁所有人都学习编程,甚至以身作则编写代码,成为美国历史上首位编写计算机代码的总统。\(2014\)年底,为庆祝“计算机科学教育周”正式启动,奥巴马编写了很简单的计算机代码:在屏幕上画一个正方形。现在你也跟他一起画吧!


    输入格式

    输入在一行中给出正方形边长\(N(3 \leqslant N \leqslant 21)\)和组成正方形边的某种字符C,间隔一个空格。


    输出格式

    输出由给定字符C画出的正方形。但是注意到行间距比列间距大,所以为了让结果看上去更像正方形,我们输出的行数实际上是列数的\(50\%\)(四舍五入取整)。


    输入样例

    10 a
    

    输出样例

    aaaaaaaaaa
    aaaaaaaaaa
    aaaaaaaaaa
    aaaaaaaaaa
    aaaaaaaaaa
    

    作者:陈越
    单位:浙江大学
    代码长度限制:16 KB
    时间限制:400 ms
    内存限制:64 MB



    注意题目要求四舍五入;


    PZ.cpp

    #include<cstdio>
    int main(){
    	int n; char c;
    	scanf("%d %c",&n,&c);
    	for(int i=1;i<=(n+1)/2;++i){
    		for(int j=1;j<=n;++j)
    			printf("%c",c);
    		puts("");
    	}
    	return 0;
    }
    






    L1-016 查验身份证 (15 分)


    一个合法的身份证号码由\(17\)位地区、日期编号和顺序编号加1位校验码组成。校验码的计算规则如下:

    首先对前\(17\)位数字加权求和,权重分配为:\(\{7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2\}\);然后将计算的和对\(11\)取模得到值Z;最后按照以下关系对应Z值与校验码M的值:

    Z:0 1 2 3 4 5 6 7 8 9 10
    M:1 0 X 9 8 7 6 5 4 3 2
    

    现在给定一些身份证号码,请你验证校验码的有效性,并输出有问题的号码。


    输入格式

    输入第一行给出正整数\(N( \leqslant 100)\)是输入的身份证号码的个数。随后\(N\)行,每行给出\(1\)\(18\)位身份证号码。


    输出格式

    按照输入的顺序每行输出\(1\)个有问题的身份证号码。这里并不检验前\(17\)位是否合理,只检查前\(17\)位是否全为数字且最后\(1\)位校验码计算准确。如果所有号码都正常,则输出All passed


    输入样例1

    4
    320124198808240056
    12010X198901011234
    110108196711301866
    37070419881216001X
    

    输出样例1

    12010X198901011234
    110108196711301866
    37070419881216001X
    

    输入样例2

    2
    320124198808240056
    110108196711301862
    

    输出样例2

    All passed
    

    注意前\(17\)应该需要判断是否全为数字,感谢zwy提供的数据:

    1
    abcdefghijklmnopq7
    

    这个身份证号显然不正常,但如果没有判断前\(17\)是否为数字,可能会被认为是正常的


    作者:陈越
    单位:浙江大学
    代码长度限制:16 KB
    时间限制:400 ms
    内存限制:64 MB



    直接按照题意模拟代换即可;


    PZ.cpp

    #include<cstdio>
    #include<iostream>
    #include<algorithm>
    using namespace std;
    int W[18]={7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};
    int Z[11]={1,0,10,9,8,7,6,5,4,3,2};
    int main(){
    	int n,cnt=0; scanf("%d",&n);
    	while(n--){
    		string s; cin>>s;
    		int res=0; bool f=0;
    		for(int i=0;i<17;++i){
    			res+=(s[i]-'0')*W[i];
    			if(s[i]<'0'||s[i]>'9') f=1; 
    		}
    		res%=11;
    		if((Z[res]==(s[17]-'0')||(Z[res]==10&&s[17]=='X'))&&!f) continue;
    		cout<<s<<endl; ++cnt;
    	}
    	if(!cnt) puts("All passed");
    	return 0;
    }
    
    






    L1-017 到底有多二 (15 分)


    一个整数“犯二的程度”定义为该数字中包含\(2\)的个数与其位数的比值。如果这个数是负数,则程度增加\(0.5\)倍;如果还是个偶数,则再增加\(1\)倍。例如数字-13142223336是个\(11\)位数,其中有3个2,并且是负数,也是偶数,则它的犯二程度计算为:\(3/11×1.5×2×100\%\),约为\(81.82\%\)。本题就请你计算一个给定整数到底有多二。


    输入格式

    输入第一行给出一个不超过\(50\)位的整数N


    输出格式

    在一行中输出N犯二的程度,保留小数点后两位。


    输入样例

    -13142223336
    

    输出样例

    81.82%
    

    鸣谢安阳师范学院段晓云老师和软件工程五班李富龙同学补充测试数据!

    作者:陈越
    单位:浙江大学
    代码长度限制:16 KB
    时间限制:400 ms
    内存限制:64 MB



    直接模拟即可;


    PZ.cpp

    #include<cstdio>
    #include<iostream>
    #include<algorithm>
    using namespace std;
    int main(){
    	string n; cin>>n;
    	
    	int len=n.size(),cnt2=0;
    	bool even=0,fu=0;
    	
    	for(int i=0;i<len;++i)
    		if(n[i]=='2') ++cnt2;
    		
    	if((n[len-1]-'0')%2==0) even=1;//这两个if顺序不可颠倒
    	if(n[0]=='-') --len,fu=1;
    	
    	double ans=1.0*cnt2/len;
    	if(fu) ans*=1.5;
    	if(even) ans*=2.0;
    	printf("%.2lf%%",ans*100);
    	return 0;
    }
    






    L1-018 大笨钟 (10 分)


    微博上有个自称“大笨钟V”的家伙,每天敲钟催促码农们爱惜身体早点睡觉。不过由于笨钟自己作息也不是很规律,所以敲钟并不定时。一般敲钟的点数是根据敲钟时间而定的,如果正好在某个整点敲,那么“当”数就等于那个整点数;如果过了整点,就敲下一个整点数。另外,虽然一天有\(24\)小时,钟却是只在后半天敲\(1 \sim 12\)下。例如在\(23:00\)敲钟,就是“当当当当当当当当当当当”,而到了\(23:01\)就会是“当当当当当当当当当当当当”。在午夜\(00:00\)到中午\(12:00\)期间(端点时间包括在内),笨钟是不敲的。

    下面就请你写个程序,根据当前时间替大笨钟敲钟。


    输入格式

    输入第一行按照hh:mm的格式给出当前时间。其中hh是小时,在\(00\)\(23\)之间;mm是分钟,在\(00\)\(59\)之间。


    输出格式

    根据当前时间替大笨钟敲钟,即在一行中输出相应数量个Dang。如果不是敲钟期,则输出:

    Only hh:mm.  Too early to Dang.
    

    其中hh:mm是输入的时间。


    输入样例1

    19:05
    

    输出样例1

    DangDangDangDangDangDangDangDang
    

    输入样例2

    07:05
    

    输出样例2

    Only 07:05.  Too early to Dang.
    

    作者:陈越
    单位:浙江大学
    代码长度限制:16 KB
    时间限制:400 ms
    内存限制:64 MB



    PZ.cpp

    #include<cstdio>
    int main(){
    	int hh,mm;
    	scanf("%d:%d",&hh,&mm);
    	if(hh<=11||(hh==12&&mm==0)) printf("Only %02d:%02d.  Too early to Dang.",hh,mm);
    	else{
    		for(int i=1;i<=hh-12;++i) printf("Dang");
    		if(mm) printf("Dang");
    	}
    	return 0;
    }
    






    L1-019 谁先倒 (15 分)


    划拳是古老中国酒文化的一个有趣的组成部分。酒桌上两人划拳的方法为:每人口中喊出一个数字,同时用手比划出一个数字。如果谁比划出的数字正好等于两人喊出的数字之和,谁就输了,输家罚一杯酒。两人同赢或两人同输则继续下一轮,直到唯一的赢家出现。

    下面给出甲、乙两人的酒量(最多能喝多少杯不倒)和划拳记录,请你判断两个人谁先倒。


    输入格式

    输入第一行先后给出甲、乙两人的酒量(不超过\(100\)的非负整数),以空格分隔。下一行给出一个正整数N(≤100),随后N行,每行给出一轮划拳的记录,格式为:

    甲喊 甲划 乙喊 乙划
    

    其中是喊出的数字,是划出的数字,均为不超过\(100\)的正整数(两只手一起划)。


    输出格式

    在第一行中输出先倒下的那个人:A代表甲,B代表乙。第二行中输出没倒的那个人喝了多少杯。题目保证有一个人倒下。注意程序处理到有人倒下就终止,后面的数据不必处理。


    输入样例

    1 1
    6
    8 10 9 12
    5 10 5 10
    3 8 5 12
    12 18 1 13
    4 16 12 15
    15 1 1 16
    

    输出样例

    A
    1
    

    作者:陈越
    单位:浙江大学
    代码长度限制:16 KB
    时间限制:400 ms
    内存限制:64 MB



    PZ.cpp

    #include<cstdio>
    int main(){
    	int Ajiu_liang,Bjiu_liang;
    	scanf("%d %d",&Ajiu_liang,&Bjiu_liang);
    	
    	int n,Ahan,Ahua,Ahe=0,Bhan,Bhua,Bhe=0; 
    	scanf("%d",&n);
    	for(int i=1;i<=n;++i){
    		scanf("%d %d %d %d",&Ahan,&Ahua,&Bhan,&Bhua);
    		if((Ahan+Bhan)==Ahua&&(Ahan+Bhan)!=Bhua) ++Ahe;
    		if((Ahan+Bhan)!=Ahua&&(Ahan+Bhan)==Bhua) ++Bhe;
    		if(Ahe>Ajiu_liang){
    			printf("A\n%d",Bhe);
    			return 0;
    		}
    		if(Bhe>Bjiu_liang){
    			printf("B\n%d",Ahe);
    			return 0;
    		}
    	}
    	return 0;
    }
    






    L1-020 帅到没朋友 (20 分)


    当芸芸众生忙着在朋友圈中发照片的时候,总有一些人因为太帅而没有朋友。本题就要求你找出那些帅到没有朋友的人。


    输入格式

    输入第一行给出一个正整数N\(( \leqslant 100)\),是已知朋友圈的个数;随后N行,每行首先给出一个正整数K\((\leqslant 1000)\),为朋友圈中的人数,然后列出一个朋友圈内的所有人——为方便起见,每人对应一个ID号,为\(5\)位数字(从\(00000\)\(99999\)),ID间以空格分隔;之后给出一个正整数M\(( \leqslant 10000)\),为待查询的人数;随后一行中列出M个待查询的ID,以空格分隔。

    注意:没有朋友的人可以是根本没安装“朋友圈”,也可以是只有自己一个人在朋友圈的人。虽然有个别自恋狂会自己把自己反复加进朋友圈,但题目保证所有K超过\(1\)的朋友圈里都至少有2个不同的人。


    输出格式

    按输入的顺序输出那些帅到没朋友的人。ID间用\(1\)个空格分隔,行的首尾不得有多余空格。如果没有人太帅,则输出No one is handsome

    注意:同一个人可以被查询多次,但只输出一次。


    输入样例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
    

    作者:陈越
    单位:浙江大学
    代码长度限制:16 KB
    时间限制:200 ms
    内存限制:64 MB



    使用vis[]记录重复ID即可;


    PZ.cpp

    #include<cstdio>
    int ans[10005];
    bool vis[100000];
    int main(){
    	int n,ID; scanf("%d",&n);
    	for(int i=1;i<=n;++i){
    		int k; scanf("%d",&k);
    		if(k==1) scanf("%d",&ID);
    		else 
    			for(int j=1;j<=k;++j){
    				scanf("%d",&ID);
    				vis[ID]=1;
    			}
    	}
    	int m; scanf("%d",&m);
    	for(int i=1;i<=m;++i){
    		scanf("%d",&ID);
    		if(!vis[ID]){
    			ans[++ans[0]]=ID;
    			vis[ID]=1;
    		}
    	}
    	if(!ans[0]) printf("No one is handsome");
    	else{
    		for(int i=1;i<=ans[0];++i)
    			if(i!=ans[0]) printf("%05d ",ans[i]);
    			else printf("%05d",ans[i]);
    	}
    	return 0;
    }
    
  • 相关阅读:
    Pandas速查手册中文版
    MySQL-增删改查
    主从复制-常见问题
    redis-主从复制
    高级数据类型-GEO
    高级数据类型-HyperLogLog
    高级数据类型-bitmaps
    redis-redis.conf基础配置
    删除策略--逐出策略
    删除策略-过期数据
  • 原文地址:https://www.cnblogs.com/Potrem/p/GPLT_L1_020.html
Copyright © 2020-2023  润新知