OJ地址
Lecture (7)包含以下五道编程题,可以在上面的OJ提交。
040:统计数字字符个数
#include <iostream>
using namespace std;
#define N 255
char str[N+10];int main(int argc, const char * argv[]) {
gets(str);int count = 0;for(int i=0;str[i];i++)if(isdigit(str[i]))count++;cout<<count<<endl;return 0;
}
041:找第一个只出现一次的字符
#include <iostream>
using namespace std;
#define N 100000
char str[N+10];
int a[26]; //统计每个字母出现的次数int main(int argc, const char * argv[]) {
cin>>str;for(int i=0;str[i];i++){
a[str[i]-'a']++;}int i;for(i=0;str[i];i++)if(a[str[i]-'a']==1)break;if(!str[i])cout<<"no"<<endl;elsecout<<str[i]<<endl;return 0;
}
042:石头剪子布
#include <iostream>
#include <cstring>
using namespace std;
#define N 10
char s1[N+10];
char s2[N+10];int main(int argc, const char * argv[]) {
int n;cin>>n;while(n--){
cin>>s1>>s2;if(strcmp(s1,"Rock")==0){
if(strcmp(s2,"Rock")==0)cout<<"Tie"<<endl;else if(strcmp(s2,"Paper")==0)cout<<"Player2"<<endl;elsecout<<"Player1"<<endl;}else if(strcmp(s1,"Paper")==0){
if(strcmp(s2,"Rock")==0)cout<<"Player1"<<endl;else if(strcmp(s2,"Paper")==0)cout<<"Tie"<<endl;elsecout<<"Player2"<<endl;}else{
if(strcmp(s2,"Rock")==0)cout<<"Player2"<<endl;else if(strcmp(s2,"Paper")==0)cout<<"Player1"<<endl;elsecout<<"Tie"<<endl;}}return 0;
}
043:最长最短单词
#include <iostream>
#include <cstring>
#define N 30000
char s1[N+10];using namespace std;int main(int argc, const char * argv[]) {
gets(s1);int minLen=1<<30, maxLen=-1;//最小初始化为最大 最大初始化为最小int start;bool flag = false;int longStart,shortStart;int len = strlen(s1);for(int i=0;i<=len;i++) //注意是 i<=len 如果i<len 对于输入只有一个字母的情况,else不会被执行,longStart,shortStart不会计算。{
if(isalpha(s1[i])) //字母字符{
if(!flag){
start = i; //记录每个单词的开始字符的位置flag = true;}}else //非字母字符{
if(flag) //第一个非字母字符 防止两个单词之间有多个非字母字符,此时单词长度不准确; 还有就是必须先碰到单词,才能计算wordlen,否则刚开始是非字母字符的话,start没有定义{
int wordlen=i-start;if(wordlen>maxLen){
maxLen=wordlen;longStart = start; //最长单词开始字符的位置}if(wordlen<minLen){
minLen=wordlen;shortStart = start; //最短单词开始字符的位置}flag = false;}}}for(int i=longStart;isalpha(s1[i]);i++)cout<<s1[i];cout<<endl;for(int i=shortStart;isalpha(s1[i]);i++)cout<<s1[i];cout<<endl;return 0;
}
044:密码翻译
#include <iostream>
using namespace std;char s1[] = "abcdefghijklmnopqrstuvwxyz";
char s2[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
#define N 80
char s[N+10];int main(int argc, const char * argv[]) {
gets(s);for(int i=0;s[i];i++)if(s[i]>='a'&&s[i]<='z')cout<<s1[(s[i]-'a'+1)%26];else if(s[i]>='A'&&s[i]<='Z')cout<<s2[(s[i]-'A'+1)%26];elsecout<<s[i];cout<<endl;return 0;
}