题目描述
我们的老朋友晨晨无意中在她最喜欢的放牧场地中央发现一个刻在一块大石头上面的耐人寻味的碑 文。碑文的文字似乎是一种神秘古老的语言。这种语言总共只有三个大字 C,O 和 W。
尽管晨晨无法破译这种语言,但她看到 C,O 和 W 按顺序形成她最喜欢的一句话 COW,她还是会很爽 很爽,于是她想知道 COW 在这段碑文中总共出现了多少次。
如果有 COW 中穿插了其他字符,但是字符 C,O,W 按照正确的顺序出现 Bessie 不会介意。如果不同的 COW 共享一些字母,她也不会介意。
例如,COW 在 CWOW 中出现一次,在 CCOW 中出现两次,在 CCOOWW 中出现 8 次 。
由于碑文的内容太过于深奥,晨晨看了头脑发胀,于是她找到了聪明的你,请你帮晨晨找出 COW 出 现多少次。
输入
第一行包含一个整数 N <= 100000。
第二行包含字符串的 N 个字符,每个字符是一个 C,O,或 W.
输出
一个整数代表 COW 出现多少次(COW 不一定要连续出现,按顺序出现也算作出现一次)。
样例输入 Copy
6 COOWWW
样例输出 Copy
6
程序
#include<bits/stdc++.h>
using
namespace
std;
int
n,a[10000],cow,sum=0;
int
main(){
cin>>n;
for
(
int
i=0;i<n;i++)
{
cin>>a[i];
if
(a[i]==cow)sum++;
}
cout<<sum;
return
0;
}
小知识:
一.ASCII码
1.计算机的存储单位
1)最小单位:二进制位,单位比特/bit/b
2)基本单位:字节,单位Byte/B,1B=8b.
3)其他存储容量的单位:KB、MB、GB、TB(1TB=1024GB;1GB=1024MB;1MB=1024KB;1KB=1024B)。
2.ASCII码
计算机内的英文字符是以二进制编码的形式来表示的,其中使用最广泛的是ASCII码,即美国信息交换标准码,包括英文字母、数字、标点、符号等,共128个。标准的ASCII码 用一个字节中的后7个位来表示,可以表示128种编码。
1> ASCII编码采用7位二进制表示一个字符,ASCII编码从0000000B ~ 1111111B,十进制表示的范围为0~127,十六进制表示的范围为00H ~ 7FH。
2>一个ASCII码在计算机内存储时占用1个字节(B)(1B=8b),最高位用“0”填充
3. ASCII编码表中的两个规律:
1>ASCII码表中数字0 ~ 9升序排列,字母A~ Z、a~z是按顺序依次排列的,相邻字符的码值递增1。
大写与小写字母的ASCII码相差32
2>需特殊记忆
字符 对应ASCII码 十六进制
0~9 48~57 30~39H
A~Z 65~90 41~5AH
a~z 97~122 61~7AH
空格 32 20H
其实只要记住数字或字母的首位对应的ASCII码即可,其他的均可以以此推算
1
4.将小写字母转大写输出
#include<iostream>
using namespace std;
int main()
{
char ans1;
cin>>ans1;
cout<<char(ans1-32); //char类型可直接计算,计算后为整型,需重新转换成字符输出
return 0;
}
1
2
3
4
5
6
7
8
9
10
5.数据类型强制转换
从上述程序可知,在程序运行过程中,有时会涉及到数据类型转换,其一般格式为:
数据类型(表达式)
例如:
#include<iostream>
using namespace std;
int main()
{
cout<<int(3.15)<<endl; //将浮点型转换成整型
cout<<char(97)<<endl; //输出对应ASCII码所对应的字符
cout<<int('C')<<endl; //输出字符的ASCII码
cout<<char('c'+2); //将c向后移动2步输出
return 0;
}
1
2
3
4
5
6
7
8
9
10
11
运行结果如下
二.常用函数
之前学过cin及cout 函数,函数其实就是某一段程序的封装,就像是家里的工具箱,每个工具箱会将相同类别的工具放到一起.而函数就是将具有某一功能的一段代码的封装,方便我们使用.
1.常见数学函数
用数学函数需写引用对应的头文件#include
函数名 作用
sqrt(x) x开算术平方根(sqrt要求x必须为double类型)
pow(x,y) 求x的y次方,乘幂运算
ceil(x) x向上取整
例:
#include<iostream>
#include<cmath> //引入数学头文件
using namespace std;
int main()
{
cout<<pow(2,4)<<endl; //求2的4次方
cout<<sqrt(15)<<endl; //求15的算术平方根
cout<<ceil(3.12)<<endl; //对3.12向上取整
return 0;
}
1
2
3
4
5
6
7
8
9
10
11
运行结果如下:
2.保留小数位数
在上述程序中,我们发现15的算术平方根自动保留了6位有效数字,那么我们如何设置有效位数呢?
函数名 作用
setprecision(n) 设置n位有效位数
fixed<<setprecision(n) 保留小数点后n位
同样运用这两个函数需引入对应的头文件#include
如果我们要将结果保留小数点后两位,上面程序可改成:
#include<iostream>
#include<cmath> //引入数学头文件
#include<iomanip>
using namespace std;
int main()
{
cout<<pow(2,4)<<endl; //求2的4次方
cout<<ceil(3.12)<<endl; //对3.12向上取整
cout<<fixed<<setprecision(2)<<sqrt(15)<<endl; //求15的算术平方根
return 0;
}
1
2
3
4
5
6
7
8
9
10
11
12
运行结果如下:
总结
本文简单介绍了什么是ASCII码,以及如何使用;还介绍了几个常见的数学函数,希望对大家有所帮助.后续会继续更新C++基础知识.