[打基础]OI/ACM基本功&一些小功能的实现&一些错误(持续更新)
基本功
- 前导0
如题,有时候需要把3输出成03这样子,可以调用 cout.width(x); ,x表示以几位,用 cout.fill(x); 来给出前导填充的内容,一般x以char的形式给出
例如可以试试下面的代码
#include<iostream> #include<cstdio> using namespace std; int main() { cout.width(4);cout.fill('0'); cout<<4<<" "<<3<<endl; cout.width(4);cout.fill('0'); cout<<3<<endl; cout.width(4);cout.fill(0); cout<<3<<endl; cout.width(4);cout.fill('x'); cout<<3<<endl; cout.width(4);cout.fill(); cout<<3<<endl; cout<<3<<endl; cout.width(4);cout.fill('0'); cout<<'s'; return 0; }
- C语言的写法
printf("%0*d",p,n);
指定输出p位数字的n,不够的用前导0补上,如果n的位数大于p则按正常的n输出
- 字符串读入
洛谷P5015(NOIP2018T1),读入一篇“文章”,统计大小写字母&数字的字符数,空格和换行符不记
c=getchar(); while(c!=-1) { if((c>='a'&&c<='z')||(c>='A'&&c<='Z')||(c>='0'&&c<='9'))n++; c=getchar(); }
要注意的应该是字符串读入结束是-1而不是0…调试了半天才意识到
错题记录(?)
从xx算起n天之后
- 涉及到除法相关的特判一下0~
- 洛谷P1424,从周$x$算起,$n$天之后,应该是第$x+n-1$天!
大模拟&数组
洛谷P5730,模拟显示屏按照给定格式输出数字0~9。
部分代码大概长这样:
char a[12][10][10]={ {{'X','X','X'},{'X','.','X'},{'X','.','X'},{'X','.','X'},{'X','X','X'}}, {{'.','.','X'},{'.','.','X'},{'.','.','X'},{'.','.','X'},{'.','.','X'}}, {{'X','X','X'},{'.','.','X'},{'X','X','X'},{'X','.','.'},{'X','X','X'}}, {{'X','X','X'},{'.','.','X'},{'X','X','X'},{'.','.','X'},{'X','X','X'}}, {{'X','.','X'},{'X','.','X'},{'X','X','X'},{'.','.','X'},{'.','.','X'}}, {{'X','X','X'},{'X','.','.'},{'X','X','X'},{'.','.','X'},{'X','X','X'}}, {{'X','X','X'},{'X','.','.'},{'X','X','X'},{'X','.','X'},{'X','X','X'}}, {{'X','X','X'},{'.','.','X'},{'.','.','X'},{'.','.','X'},{'.','.','X'}}, {{'X','X','X'},{'X','.','X'},{'X','X','X'},{'X','.','X'},{'X','X','X'}}, {{'X','X','X'},{'X','.','X'},{'X','X','X'},{'.','.','X'},{'X','X','X'}} };
注意在定义数组的时候用这种写法,之后似乎不能这样给数组赋值