您的位置:首页 > 编程语言 > C语言/C++

程序设计与算法(一)C语言程序设计CAP 第七周

2018-01-08 23:26 344 查看

1:统计数字字符个数

查看
提交
统计
提问

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

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

输入一行字符串,总长度不超过255。
输出输出为1行,输出字符串里面数字字符的个数。
样例输入
Peking University is set up at 1898.


样例输出
4



#include <iostream>
using namespace std;
char line[400];
int main()
{
cout<<"Peking University is set up at:";
cin.getline(line ,300);
int total=0;   //用来计数
for( int i=0 ;line[i];++i)
{
if(  line[i] >='0'  &&  line[i] <= '9')
++total;
}
cout<<total<<endl;
return 0;
}


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

查看
提交
统计
提问

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

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

输入一个字符串,长度小于100000。
输出输出第一个仅出现一次的字符,若没有则输出no。
样例输入
abcabd


样例输出
c



#include<iostream>
#include<algorithm>
#include<string.h>
using namespace std;
int main()
{
char c[300];
cin.getline( c,300);
int bit_map[26]={0};
int i=0;
for(;i<strlen(c);++i)
bit_map[c[i]-'a']++;
for(i=0;i<strlen(c);++i)
{
if(bit_map[c[i]-'a']==1)
{
printf(" %c ",c[i]);
break;
}
}
if(i>=strlen(c))
printf("No ele to the rule\n");
return 0;
}


其他方法:

#include <stdio.h>
#include<string.h>
int main()
{
char a[100000];//首先定义一个字符数组存储字符
int b[27]= {0};//用一个一位数组存储每个小写字母出现的次数
int i,len,flag=0;//flag用作状态位
gets(a);//从键盘输入一个字符串
len=strlen(a);//用strlen函数求出字符串的长度

for(i=0; i<len ; i++)
{
b[a[i]-'a']++;//用ASCII码计算,得到每个小字母对应的整型数据,并把出现的次数存入一维数组
}

for(i=0; i<len ; i++)
{
if(b[a[i]-'a']==1)//筛选出只出现一次的小写字母
{
printf("%c\n",a[i]);//输出第一个
flag=1;
break;//输出第一个出现一次的字母后,程序结束
}
}

if(flag==0)
printf("no\n");
return 0;
}



3:石头剪子布

查看
提交
统计
提问

总时间限制: 
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



#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
char s1[20],s2[20];
int main()
{
int n;
cin >> n;
for(int i = 0; i < n; ++i) {
cin >> s1 >> s2;
if( strcmp( s1,"Rock")==0){
if( s2[0]=='S')
cout<< "Player1"<<endl;
else if( s2[0]='P')
cout<< "Player2"<<endl;
else if( s2[0]='R')
cout <<"tie"<< endl;
}
else if( strcmp(s1,"Paper") == 0) {
if( s2[0] == 'S')
cout << "Player2" << endl;
else if( s2[0] == 'R')
cout << "Player1" << endl;
else
cout << "Tie" << endl;
}
if( strcmp(s1,"Scissors") == 0) {
if( s2[0] == 'S')
cout << "Tie" << endl;
else if( s2[0] == 'P')
cout << "Player1" << endl;
else
cout << "Player2" << endl;
}
}
return 0;
}



4:最长最短单词

查看
提交
统计
提问

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

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

试输出第1个最长的单词和第1个最短单词。 

输入一行句子。
输出两行输出:

第1行,第一个最长的单词。

第2行,第一个最短的单词。
样例输入
I am studying Programming language C in Peking University


样例输出
Programming
I


#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
char line[30000];
bool IsLetter(char c)
{
return c >= 'a' && c <= 'z' || c >= 'A' && c <= 'Z';
}
int main()
{
cin.getline(line,29000);

int longStart,shortStart;
int maxLen = 0,minLen = 1<< 30;
int lastWordStart;
bool wordMeet = false;
int len = strlen(line);
for(int i = 0;i <= len; ++i) {
if( IsLetter(line[i])) {
if( !wordMeet) {
wordMeet = true;
lastWordStart = i;
}
}
else {
if( wordMeet ) {
wordMeet = false;
int wordLen = i - lastWordStart;
if( wordLen > maxLen ) {
maxLen = wordLen;
longStart = lastWordStart;
}
if( wordLen < minLen ) {
minLen = wordLen;
shortStart = lastWordStart;
}
}
}
}
for(int i = longStart; IsLetter(line[i]); ++ i)
cout << line[i];
cout << endl;
for(int i = shortStart; IsLetter(line[i]); ++ i)
cout << line[i];
return 0;
}


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


5:密码翻译

查看
提交
统计
提问

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

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

输入输入一行,包含一个字符串,长度小于80个字符。
输出输出每行字符串的加密字符串。
样例输入
Hello! How are you!


样例输出
Ifmmp! Ipx bsf zpv!



#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
char line[100];
int main()
{
cin.getline(line,90);
for(int i = 0; line[i]; ++i) {
if( line[i] >= 'a' && line[i] <= 'y' || line[i] >= 'A' && line[i] <= 'Y')
++line[i];
else if( line[i] == 'z')
line[i] = 'a';
else if( line[i] == 'Z')
line[i] = 'A';
}
cout << line;
return 0;
}







                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: