upc 2020春季个人训练赛第五场

问题 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;
}
发布了58 篇原创文章 · 获赞 0 · 访问量 1616

猜你喜欢

转载自blog.csdn.net/magic_wenge/article/details/105356781