说反话-加强版

描述:

给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出。

输入格式:

测试输入包含一个测试用例,在一行内给出总长度不超过500 000的字符串。字符串由若干单词和若干空格组成,其中单词是由英文字母(大小写有区分)组成的字符串,单词之间用若干个空格分开。

输出格式:

每个测试用例的输出占一行,输出倒序后的句子,并且保证单词间只有1个空格。

输入样例:

Hello World Here I Come

输出样例:

Come I Here World Hello

代码:

#include<bits/stdc++.h>
#include<vector>
using namespace std;
int main() {
    char s[500005];
    vector<char*> a;
    int i = 0;
    char c;
    while((c = getchar())!='\n'){
        s[i] = c;
        i++;
    }
    s[i]='\0';
    char *p;
    p = strtok(s," ");
    int len = 0;
    while(p) {
        a.push_back(p);
        p = strtok(NULL," ");
    }
    vector<char*>::iterator it;
    for(it = a.end()-1;it!=a.begin()-1;){
        printf("%s",*it);
        it--;
        if(it!=a.begin()-1){
            printf(" ");
        }
    } 
    return 0;
}

解析:

首先解释几个C++函数:

  1. vector<数据类型> #可以理解为动态数组,再空间不足时自动创建。<>中间放置不同的数据类型
  2. a.push_back() #动态数组添加元素的方法。
  3. vector<数据类型>::iterator #创建动态数组的迭代器,相当于指针,用来遍历动态数组。
  4. a.end() #返回指向动态数组末尾的迭代器,是动态数组的结束标志。
  5. a.begin() #返回指向动态数组开头的迭代器。

创建字符数组用来存题目给的字符串,由于PTA的g++编译器不支持gets(),所以使用这种方法来接收包含空格的字符串。接受结束后再末尾添加'\0'作为结束的标志。因为char*与char数组类型相同,所以vector中间放字符指针类型,循环中拆分字符串,具体拆分原理和strrok函数可以看我另一篇博客(链接),最后利用迭代器从最后一位开始遍历动态数组,并保证最后不输出多余的空格。

到底有多二

描述:

一个整数“犯二的程度”定义为该数字中包含2的个数与其位数的比值。如果这个数是负数,则程度增加0.5倍;如果还是个偶数,则再增加1倍。例如数字-13142223336是个11位数,其中有3个2,并且是负数,也是偶数,则它的犯二程度计算为:3/11×1.5×2×100%,约为81.82%。本题就请你计算一个给定整数到底有多二。

输入格式:

输入第一行给出一个不超过50位的整数N。

输出格式:

在一行中输出N犯二的程度,保留小数点后两位。

输入样例:

-13142223336

输出样例:

81.82%

代码:

#include<bits/stdc++.h>
using namespace std;
int main() {
    string s;
    float x;
    int a,b,t;
    x=0,a=0;
    cin>>s;
    t=s.size();
    if(s[0]=='-')
        b=s.size()-1;
    else
        b=s.size();
    for(int i=0; i<s.size(); i++) {
        if(s[i]=='2')
            a++;
    }
    x=1.0*a/b;
    if(s[0]=='-') 
        x*=1.5;
    if((s[t-1]-'0')%2==0) 
        x*=2;
    printf("%.2f%%\n",x*100);
    return 0;
}

解析:

  1. string #字符串类型,相当于C语言中的字符数组。
  2. s.size() #返回该字符串的长度。
  3. s[] #字符串中指定下标的字符

把整个数字看作一个字符串,如果第一位是负号,则数字长度减一,遍历整个字符串,寻找包含字符2的数量,最后根据题目条件进行计算。


一只小菜鸡