问题 A: 统计字数
题目描述
大家都知道Word是一个强大的文字处理软件,具有丰富的字数统计功能。
小明听说你学习了程序设计,想请你帮他制作一个简易统计字数的软件,现在给定小明书写的一段文字,请你统计出文字中,英文字母数量,数字字符数量。
输入
第一行包含一个字符串包含英文字母和数字,以及一些常见标点符号,不包含中文。
输出
两个整数,中间用空格分隔,分别表示英文字母数量和数字字符数量。
样例输入 Copy
2018YuyaoProgrammingContest.
样例输出 Copy
23 4
提示
对于60%的数据,这段文字中的长度不超过200。
对于100%的数据,文字长度不超过1000。
另有50%的数据,不包含空格字符。
char a[1000];
int n,sum1,sum2;
int main()
{
gets(a);
n = strlen(a);
for(int i=0;i<n;i++)
{
if(a[i] >= '0' && a[i] <= '9')
sum1++;
if((a[i] >= 'A' && a[i] <= 'Z') || (a[i] >= 'a' && a[i] <= 'z'))
sum2++;
}
printf("%d %d\n",sum2,sum1);
return 0;
}
问题 B: 整数拆分
题目描述
小明最近在学习整数拆分,他在草稿纸上随手写下了一串数字,仅包含“0”~“9”这十种数字,长度不超过9。
现在你可以在这串数字中选出任意一个子串(不能为空,可以是原串),不能以数字“0”开始。小明想要知道,这些可能的子串构成的数,有多少个比他心目中的幸运数字x更大。
注:子串只要在原串中的起始或者终止位置不同,就认为是不同的子串;子串和x都是十进制的。
输入
第一行输入一个数字串S,仅包含数字“0”~“9”这十种数字,长度不超过9。
第二行包含一个整数x,表示小明的幸运数字。
输出
有多少个非“0”开始的子串,表示成十进制数后比x更大。
样例输入 Copy
1023
12
样例输出 Copy
3
提示
子串“23”、“102”和子串“1023”,都要比12更大。
对于50%的数据,S的第一个字母不超过“2”。
对于100%的数据,S仅包含数字“0”~“9”这十种数字,1<=S的长度<=9;0<=x<=777444111。
思路:
两层循环把每一次选出来的子串转换成数字和x比较即可,如果是0开头就continue掉
char s[15];
int a[500];
ll ans,cnt,x,p;
int main()
{
gets(s); cin >> x;
int n = strlen(s);
for(int i=0;i<n;i++)
{
p = 0;
if(s[i] == '0') continue;
for(int j=i;j<n;j++)
{
p = p*10+(s[j]-'0');
if(p > x) ans++;
}
}
cout << ans << endl;
return 0;
}
问题 F: 婚礼上的小杉
题目描述
原来妖精先生在夏威夷的教堂里住了太久,家里的信件堆积了太多,凌乱不堪,你的工作就是帮他整理信件。
总计N封的信件,每个信件都有自己的特征码和序号。
输入
每组测试数据的第一行有N个数,分别是不超过N的不重复的正整数,表示N封信件的序号。
第二行也有N个数,分别是有效数字不超过255位的浮点数(没有前导的0且均大于0),表示N封信件的特征码。
信件的序号和特征码按照给出的顺序一一对应。序号与序号间、特征码与特征码间有一个空格,两行均没有多余的空格。(1<=N<=1000)
输出
对每组数据输出N行
请按照序号递增的顺序输出信件的特征码
每行一个特征码,且特征码的格式应与输入完全一致
样例输入 Copy
3 1 2
1.0 21.2 1
样例输出 Copy
21.2
1
1.0
思路:
这个题只需要定义成结构体,然后写个cmp函数比较即可,只是需要预处理读入,并且题目中要求特征码的输出格式要与输入完全一致,定义成double并不能满足条件,于是可以想到定义成字符串
char str[20000];
char c;
int k,p,num;
struct node
{
int c;
string s;//格式一致,那么直接定义成字符串就好了
};
struct node a[200000];
bool cmp(const node &x,const node &y)
{
return x.c < y.c;
}
int main()
{
//读入处理
while(c = getchar())
{
if(c == '\n' || c == '\r') break;
str[++k] = c;
}
for(int i=1;;i++)
{
if(str[i] == 0)
{
a[++p].c = num,num = 0;
break;
}
if(str[i] == ' ')
{
a[++p].c = num,num = 0;
}
else num = num*10+str[i]-'0';
}
for(int i=1;i<=p;i++)
cin >> a[i].s;
sort(a+1,a+p+1,cmp);
for(int i=1;i<=p;i++)
cout << a[i].s << endl;
return 0;
}