c++ 算法

输入输出优化

cin cout

scanf printf

格式:

  • cin >> 容器变量
  • cout << 容器变量

运行慢(可以关闭同步流)

  1. ios::sync_whith_stdio(false);
  2. cin.tie(0);
  • scanf(“%d”,&x);
  • printf(“%d”,&x);

运行快

效率:

数据量在万级以下区别不明显

  • cin 返回:是否与容器类型一致(true,false)

  • scanf() 返回:有效的数据长度(个数)

课堂练习一 (不可见字符读取)

空白文档 - 图1

  1. #include <iostream>
  2. using namespace std;
  3. const int N = 105;
  4. char arr[N];
  5. int main(){
  6. int n ;
  7. char x;
  8. cin >> n;
  9. for(int i = 1 ;i <=n; i++){
  10. // cin >> 不建议,题目要求读取不可见字符
  11. scanf("%c", &x); // 可读取所有字符
  12. arr[i] = x;
  13. }
  14. for(int i = n; i > 0 ; i--){
  15. int idx = arr[i] + 1;
  16. if( idx % 2 == 0){
  17. printf("%d ", i);
  18. }
  19. }
  20. return 0;
  21. }

课堂练习二 (未知数量,指定结束符)

空白文档 - 图2

  1. int x ;
  2. while(cin >> x){ // cin 自动忽略空格,输入数据与容器类型是否一致
  3. }
  4. while(scanf("%d",&x) == 1){ // 判断有效的获取数据数量
  5. }

课堂练习三 (结束符也符合容器类型判断)

空白文档 - 图3

  1. int n;
  2. while(cin >> n && n !=0 ){
  3. }

课堂练习四:

空白文档 - 图4

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. int main(){
  4. int p,x,sum;
  5. p=1;
  6. x=15;
  7. sum=x;
  8. do{
  9. p++;
  10. x+=2;
  11. sum+=x;
  12. }while(sum!=312);
  13. // cout<<x<<endl;
  14. // cout<<p<<endl;
  15. printf("%d\n%d\n",x,p);
  16. return 0;
  17. }

课后练习:

椰程信奥p68:时间差