c++ 算法
输入输出优化
cincout
scanfprintf
格式:
- cin >> 容器变量
- cout << 容器变量
运行慢(可以关闭同步流)
ios::sync_whith_stdio(false);cin.tie(0);
- scanf(“%d”,&x);
- printf(“%d”,&x);
运行快
效率:
数据量在万级以下区别不明显
cin 返回:是否与容器类型一致(true,false)
scanf() 返回:有效的数据长度(个数)
课堂练习一 (不可见字符读取)

#include <iostream>using namespace std;const int N = 105;char arr[N];int main(){int n ;char x;cin >> n;for(int i = 1 ;i <=n; i++){// cin >> 不建议,题目要求读取不可见字符scanf("%c", &x); // 可读取所有字符arr[i] = x;}for(int i = n; i > 0 ; i--){int idx = arr[i] + 1;if( idx % 2 == 0){printf("%d ", i);}}return 0;}
课堂练习二 (未知数量,指定结束符)

int x ;while(cin >> x){ // cin 自动忽略空格,输入数据与容器类型是否一致}或while(scanf("%d",&x) == 1){ // 判断有效的获取数据数量}
课堂练习三 (结束符也符合容器类型判断)

int n;while(cin >> n && n !=0 ){}
课堂练习四:

#include<bits/stdc++.h>using namespace std;int main(){int p,x,sum;p=1;x=15;sum=x;do{p++;x+=2;sum+=x;}while(sum!=312);// cout<<x<<endl;// cout<<p<<endl;printf("%d\n%d\n",x,p);return 0;}
课后练习:
椰程信奥p68:时间差
模拟
报数游戏

#include<bits/stdc++.h>using namespace std;int main(){int mm = 1 , bb = 1 ,num = 0 ;for(int i = 1 ; i <= 1000;i++){if(mm > 20 ) mm = 1;if(bb > 30 ) bb = 1;if(mm == bb ){// cout << i << ": " << mm <<" - " << bb << endl;num ++ ;}mm ++;bb ++;}cout << num;return 0;}
阅读程序


