题解:P14583 彩绘标志
qiuby123456 · · 题解
这题很简单,先不看输入格式,题意可以翻译为:如果
那么现在看一下输入格式。发现输入格式带有非数字字符,那么就要对字符进行处理。以下介绍几种方法处理输入。
方法 1:scanf
scanf 是一个功能很强大的输入函数。它不仅可以输入单一的整数、字符、无空格字符串,还可以输入指定字符集的内容,甚至整行字符串(代替 fgets),就是速度有点慢。不过用在这题绰绰有余。
我们可以用 scanf("%dg %dg", &a, &b); 来读入。其中 %d 表示读入一个整数到变量中,%dg 表示在读入整数后面紧跟着读入字符 g,%dg %dg 表示在读入两个“整数 +g”之间用若干个空格或其它空白符隔开。
完整代码:
#include <cstdio>
int main(){
int a, b;
scanf("%dg %dg", &a, &b);
if (a > b){
printf("0");
}
else{
printf("1");
}
return 0;
}
方法 2:cin
使用 cin 一样可以分别输入整数和字符。可以使用 cin>>digit>>c 的形式来输入一个整数加一个字符。cin 读取东西的时候会自动过滤空格,所以两个“整数 +g”之间不需要再额外读入空格。
ios::sync_with_stdio(false); 语句和 cin.tie(NULL); 语句可以用来提升 cin 的读入速度。当然本题可以不使用。建议在正式比赛当中使用,不要敲错。如果有 freopen,最好将这两条语句写在 freopen 的后面。
完整代码:
#include <iostream>
using namespace std;
int main(){
int a, b;
char g1, g2;
ios::sync_with_stdio(false);
cin.tie(NULL);
cin >> a >> g1 >> b >> g2;
if (a > b){
cout << 0;
}
else{
cout << 1;
}
return 0;
}
方法 3:快速读入
手写的快读可以选择只读入数字字符而忽略非数字字符。由于数字字符都是按从小到大顺序紧挨在一起的,所以数字字符的范围为字符 0 到字符 9,非数字字符的范围就扣除掉数字字符的范围。
快速读入一般使用 getchar 函数即可。在【模板】快速读入中使用 getchar 则会超时,但那与本题无关。此题用 getchar 即可。
完整代码:
#include <cstdio>
using namespace std;
int read(){
int x = 0;
int c = getchar();
while (c < '0' || c > '9'){//非数字字符
c = getchar();//直接跳过读新字符
}
while (c >= '0' && c <= '9'){//数字字符
x = x * 10 + (c - '0');
c = getchar();
}
return x;
}
int main(){
int a = read(), b = read();
if (a > b){
putchar('0');
}
else{
putchar('1');
}
return 0;
}
以上就是常用的三种读入方法,希望对你有所帮助。