1、【错误1:漏字符】
超级玛丽 鼠标复制时漏空格。(洛谷p1000)
《马里奥》:用了raw string literal
(原始字符串字面值),即::::cout<<R"(XXXX)";
2、【错误2:浮点数】
《级数求和》:n分之一,分子分母至少一个要用浮点数。
Sn=1+1/2+1/3.....+1/n ——————Sn 和 n都须设为浮点数。(浮点!!!都!!!)
(或:仅Sn实数,计算时用1.0/n)
3、【错误3:经验主义】(小错真难发现。。)
①惯性把a[i]写成a[n]......
②还有把n/=10写成n/=n(怪不得没输出。。)
③scanf(“请输入月份:%d”,&a)了,应该是printf的工作。
4、【错误4:大括号位置】
for(int i=0;i<7;++i) {if(x==c[i]) {cout<<i+1; break;}}
最后一个for循环,原本if后面忘{}到一起了,只考虑到for的{}。
(结果是c【0】检查后就直接break了,导致无输出。)
5、【错误5:计算细节】
①端点,范围加以注意。(如日期需-1,大于还是>=)
②还有就是计算过程简化,别超时。(比如质数判断,%到sqrt(n)代替%到n)
③题目条件!阴间题目说明放末尾:输入的整数在 [1,4×10的18次方]内。
④数据类型:如char c,但是(c+32)值为不再为char类型。
!!!(入门2001求两整数和竟然错了!)
总结:①int和long:10位; long long:19位数字
②一定要看全要求和提示!!小心阴间。
6、用一些变量最好赋一下初值。。(一些错误的具体原因尚不知)
7、《大写数字》不会输汉字,①使用字符指针;②wchar尚未掌握;
③switch或if接打印就好了。
③#include <stdio.h>
int main(){
int x,f=1,d;
scanf("%d",&x);
d=x;int len;
while(d){
d/=10;
len++;
f= f*10;
}
f/= 10;
while(len){
len--;
if(x/f==0) printf("零");
if(x/f==1) x-=f,printf("一");
if(x/f==2) x-=f*2,printf("二");
if(x/f==3) x-=f*3,printf("三");
if(x/f==4) x-=f*4,printf("四");
if(x/f==5) x-=f*5,printf("五");
if(x/f==6) x-=f*6,printf("六");
if(x/f==7) x-=f*7,printf("七");
if(x/f==8) x-=f*8,printf("八");
if(x/f==9) x-=f*9,printf("九");
f /= 10;
}
return 0;
}
8、《校门外的树》 :0和1作为两类-----标记。
9、【数字位数 i 】for( i=0;m>0;++i) m/=10;
10、【回文】:
int loop(int x){
int i=0,n=x;
while(n){
i=i*10+n%10;
n/=10;
}
return i;}
11、【冒泡法从小到大排序】: // n个数字,比较n-1轮,每轮 n-(轮数)次//
for(j=0;j<N;++j)
for(i=0;i<=N-j-1;++i) if(x[i]>x[i+1]) {
a=x[i];
x[i]=x[i+1];
x[i+1]=a;
}
12、【递归与找规律类题目】(以及看一下函数递归调用如下)
特殊法写几项来观察,如走楼梯问题(一次上一级或二级)。
【问题描述】
假设有n阶(n>=1)楼梯,小明一次可以选择走1阶,也可以选择走2阶,问多少种走法。比如有5阶台阶,共有8种走法。1 1 1 1 1;1 1 1 2;1 1 2 1;1 2 1 1;1 2 2;2 1 1 1;2 1 2;2 2 1。要求使用递归解法。
【输入形式】在键盘输入数据
【输出形式】在下一行输出楼梯的走法的总数
【样例输入】5
【样例输出】8
·分析: 到第五节的前提是
1.从第四节跨一步
2.从第三节跨两步
所以f5=f4+f3。
·变式,若一次上1/2/3,则f5=f2+f3+f4。
#include <bits/stdc++.h>
using namespace std;
int main()
{
int lyric(int n);
int n;
cin>>n;
cout<<lyric(n);
return 0;
}
int lyric(int n){
int t;
if(n==1) t=1;
else if(n==2) t=2;
else t=lyric(n-1)+lyric(n-2);
return t;
}
13、(不高兴的津津)
【1】判断7天中是否存在0:
①c[0]=0且c[1]=0......
②想到赋值n=0,最后输出n(否则是1),但不可行,n终值独裁。
③累加法,皆0和亦为0。//good法也!
【2】无需设置 三个数组。
如下,根本一个都不用设。
学习此处for,只需先设变量,然后在for里反复多次利用。
int a,b,s,max=0,i,day=0; //a,b是我们津津(以下简称JJ)每天上课时间,s意为sum是上课时间之和
for (i=1;i<8;i++) // i为循环变量,day是JJ一周最不高兴的一天
{
cin>>a>>b; //输入a,b
s=a+b; //计算一天的上课时间
if ((s>max)&&(s>8)) max=s,day=i;
14、&&短路特性。
15、三个概念注意点:
①cout,cin为iostream类的对象,不是关键字
②c++仅直接提供了赋值表达式
③printf,scanf实际上是函数而非语句
16、c++流类库
·stdin标准输入设备为参数,使cin与设备关联。(cin流:标准输入流)
·istream(ostream也是)类中重载<<,对不同类型都要分别重载一次。
·cout<<"111"等价于cout.operator<<("111") 调用的重载是(char *)型-----字符串111值为其首字节的地址。
·cout将数据插入到cout流,函数返回流对象cout。
17、有格式输入输出
①使用控制符(<iomanip>),如setfill('*'),setw(2)
②cout的成员函数:
precision()
width()
fill()
setf() //对应控制符setiosflags
unsetf() //resetiosflags
设置格式状态用的格式标志:
ios::left
ios::internal
ios::hex
ios::showbase(OCT:0,HEX:0x)
ios::showpoint
ios::showpos(正数显示“+”)
ios::uppercase(HEX和SCI的E)
//ios::unitbuf(输出后刷新流)
//ios::stdio(输出后刷新stdout,stderr)
注意:a、宽度width和setw之对后面第一个输出项有效;
b、默认十进制输出数字,若要改变格式,
需要先cout.unsetf(ios::dec);(只有int成功输出hex了)
18、【错误6】char虽然可以表示整数-128~127,但cin一个char时只会读取一位字符或数字。
可以用此原理来回文输入。
19、格式标志、输入输出方式,都是枚举值(枚举常量)