<span>程序设计与算法(一)第7周测验(2020春季)</span>

001:统计数字字符个数

  • 总时间限制:1000ms
  • 内存限制:65536kB

描述

  • 输入一行字符,统计出其中数字字符的个数。

输入

  • 一行字符串,总长度不超过255。

输出

  • 输出为1行,输出字符串里面数字字符的个数。

样例输入

  • Peking University is set up at 1898.

样例输出

  • 4

AC

#include <iostream>
using namespace std;
char str[300];
int main(){
	int n=0;
	cin.getline(str,300);	//调用函数读入一行字符串 
	for(int i=0;str[i];i++){
		if(str[i]>='0' && str[i]<='9')	//是否为数字 
			n++;
	}
	printf("%d\n",n);
	return 0;
}

002:找第一个只出现一次的字符

  • 总时间限制:1000ms
  • 内存限制:65536kB

描述

  • 给定一个只包含小写字母的字符串,请你找到第一个仅出现一次的字符。如果没有,输出no。

输入

  • 一个字符串,长度小于100000。

输出

  • 输出第一个仅出现一次的字符,若没有则输出no。

样例输入

  • abcabd

样例输出

  • c

AC

#include <iostream>
#include <cstring>
using namespace std;
char str[100010];
int main(){
	int n=0,m=0;
	gets(str);
	n=strlen(str);
	for(int i=0;i<n;i++){
		for(int j=0;j<n;j++)
			if(str[i]==str[j] && i!=j)
				m=1;
		if(m==0){
			printf("%c",str[i]);
			return 0;
		}
		m=0; 
	}
	printf("no");
	return 0;
} 

003:石头剪子布

  • 总时间限制:1000ms
  • 内存限制:65536kB

描述

  • 石头剪子布,是一种猜拳游戏。起源于中国,然后传到日本、朝鲜等地,随着亚欧贸易的不断发展它传到了欧洲,到了近现代逐渐风靡世界。简单明了的规则,使得石头剪子布没有任何规则漏洞可钻,单次玩法比拼运气,多回合玩法比拼心理博弈,使得石头剪子布这个古老的游戏同时用于“意外”与“技术”两种特性,深受世界人民喜爱。
  • 游戏规则:石头打剪刀,布包石头,剪刀剪布。
  • 现在,需要你写一个程序来判断石头剪子布游戏的结果。

输入

  • 输入包括N+1行:
  • 第一行是一个整数N,表示一共进行了N次游戏。1 <= N <= 100。
  • 接下来N行的每一行包括两个字符串,表示游戏参与者Player1,Player2的选择(石头、剪子或者是布):
  • S1 S2
  • 字符串之间以空格隔开S1,S2只可能取值在{“Rock”, “Scissors”, “Paper”}(大小写敏感)中。

输出

  • 输出包括N行,每一行对应一个胜利者(Player1或者Player2),或者游戏出现平局,则输出Tie。

样例输入

3
Rock Scissors
Paper Paper
Rock Paper

样例输出

Player1
Tie
Player2

提示

  • Rock是石头,Scissors是剪刀,Paper是布。

思考

  • 用列举会超时,首字母判断会使程序简单且用时少,这里使用了二维字符数组。

AC

#include <iostream>
#include <cstring>
using namespace std;
#define p 100
char a[p][p],b[p][p];
int main(){
	int n;
	scanf("%d",&n);
	for(int i=0;i<n;i++){
		cin>>a[i]>>b[i];
		if(a[i][0]=='R'&b[i][0]=='S'||a[i][0]=='S'&&b[i][0]=='P'||a[i][0]=='P'&&b[i][0]=='R')
			cout<<"Player1"<<endl;
		else if(a[i][0]==b[i][0])  
			cout<<"Tie"<<endl;
		else
			cout<<"Player2"<<endl;
	}
	return 0;
}

004:最长最短单词

  • 总时间限制:1000ms
  • 内存限制:65536kB

描述

  • 输入1行句子(不多于200个单词,每个单词长度不超过100),只包含字母、空格和逗号。
  • 单词由至少一个连续的字母构成,空格和逗号都是单词间的间隔。
  • 试输出第1个最长的单词和第1个最短单词。

输入

  • 一行句子。

输出

  • 两行输出:
  • 第1行,第一个最长的单词。
  • 第2行,第一个最短的单词。

样例输入

  • I am studying Programming language C in Peking University

样例输出

  • Programming
  • I

提示

  • 如果所有单词长度相同,那么第一个单词既是最长单词也是最短单词。

思考

  • 第一种方法是思考的,第二种方法是网上的,因为第一个的输出……但是过了!!!

AC1

#include <stdio.h>
#include <string.h>
#define p 200
int main(){
	char anum[p],bmax[p],cmin[p];
	int maxl=-1,minl=110,count;
	while(scanf("%s",a)==1){
		count=strlen(anum);
		if(count>maxl){	//确定最长的单词 
			maxl=count;
			strcpy(bmax,anum);	//将单词从a拷贝到b 
		}
		if(count<minl){	//确定最短的单词 
			minl=count;
			strcpy(cmin,anum);
		}
	}
	printf("%s\n%s",bmax,cmin);
	return 0;
}

AC2

#include <iostream>
#include <cstring>
using namespace std;
#define p 20010
int main(){
	char anum[p],bmax[p],cmin[p];
	int maxl=-1,minl=110,count;
	cin.getline(anum,20010);
	count=strlen(anum);
	int sr=0,sr2=0,sr3=0;
	for(int i=0;i<=count;i++){
		if(anum[i]!=' ' && anum[i]!=',' && anum[i] !='\0')
			sr++;
		else if(sr>0){
			if(sr>maxl){
				maxl=sr;
				sr2=i-sr;
			}
			if(sr<minl){
				minl=sr;
				sr3=i-sr;
			}
			sr=0;
		}
	}
	for(int i=sr2;i<=sr2+maxl-1;i++)
		cout<<anum[i];
	cout<<endl;
	for(int i=sr3;i<=sr3+minl-1;i++)
		cout<<anum[i];
	return 0;
}

005:密码翻译

  • 总时间限制:1000ms
  • 内存限制:65536kB

描述

  • 在情报传递过程中,为了防止情报被截获,往往需要对情报用一定的方式加密,简单的加密算法虽然不足以完全避免情报被破译,但仍然能防止情报被轻易的识别。我们给出一种最简的的加密方法,对给定的一个字符串,把其中从a-y,A-Y的字母用其后继字母替代,把z和Z用a和A替代,其他非字母字符不变,则可得到一个简单的加密字符串。

输入

  • 输入一行,包含一个字符串,长度小于80个字符。

输出

  • 输出每行字符串的加密字符串。

样例输入

  • Hello! How are you!

样例输出

  • Ifmmp! Ipx bsf zpv!

思考

  • 把其中从a-y,A-Y的字母用其后继字母替代,把z和Z用a和A替代,其他非字母字符不变。
  • 注意其他非字母字符不变,只需把注意变的部分声明即可。这里字符串时可以直接输出,不用遍历也可以。

AC

#include <iostream>
using namespace std;
char str[100];
int main(){
	gets(str);
	for(int i=0;str[i];i++){
		if((str[i]>='a'&& str[i]<='y')||(str[i]>='A'&& str[i]<='Y'))
			str[i]=str[i]+1;
		else if(str[i]=='z')
			str[i]='a';
		else if(str[i]=='Z')
			str[i]='A';
	}
	cout<<str;
	return 0;
}

第七周全部题解,🆗。

全部评论

相关推荐

菜菜咪:1. 可以使用简历网站的模版,美观度会更好一点 2. 邮箱可以重新申请一个,或者用qq邮箱的别名,部分hr可能会不喜欢数字邮箱 3. 项目经历最好分点描述,类似的项目很多,可以参考一下别人怎么写的 4. 自我评价可加可不加,技术岗更看重技术。最后,加油,优秀士兵
点赞 评论 收藏
分享
10-14 23:01
已编辑
中国地质大学(武汉) Java
CUG芝士圈:虽然是网上的项目,但最好还是包装一下,然后现在大部分公司都在忙校招,十月底、十一月初会好找一些。最后,boss才沟通100家,别焦虑,我去年暑假找第一段实习的时候沟通了500➕才有面试,校友加油
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
11-29 12:19
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务