ACM模式下的输入输出方式(C/C++)

以牛客网的华为练习题为例子,以练习输入输出。

1. 常见的输入输出方式

1.1 C++语言

#include<iostream>
cin >> x;
cout << x;

这是C++最常用的输入输出方式,cin会自动跳过tab/space/enter取数据。

1.示例1:读取一行数据
//待读取数据
 1 2 3 4 

 //方式1
 cin >> a >> b >> c >> d;
 
 //方式2
 for (int i = 0; i < 4; ++i)
 	cin >> a;

2.示例2:读取一个字符串
//待读取数据
name

string str;
cin >> str;

对于一行有多个数据,可以用多个变量一起读取,也可以用for循环一一读取。

#include<string>
getline(cin, x);

getline函数可以读入 SPACE/TAB,遇到ENTER停止读取;且读取完成后会丢弃末尾的换行符。

1.2 C语言

#include<stdio.h>
scanf("%d", &a);
printf("%d", a);

scanf函数与printf函数一样,都被声明在头文件stdio.h中,因此使用两个函数需要加上头文件声明。

sacanf函数的返回值为int型,代表读取成功的个数,如果遇到错误或者遇到end of file,返回值为EOF。

while(scanf("%d %d", &a, &b) != EOF)

所以在不定行的题目中有这样的代码,while的条件是scanf函数返回的值不等于EOF,就是意味着还没到文件结束的位置。

scanf("%d%d%d",&a,&b,&c);		//方式1
scanf("%d %d %d",&a,&b,&c)		//方式2
scanf("%d,%d,%d",&a,&b,&c)	//方式3

方式1和方式2是一样的,在这种方式下,数据之间不可以用逗号分隔,只能用空白字符(空格或tab键或者回车键)分隔。假设是方式3,则数据之间必须有逗号。

2. 题目已规定输入的个数

在这里插入图片描述
在这里插入图片描述
题目已经在第一行规定了学生的数目为N,操作的数目为M。一般规定了具体行数的,都可以用for循环来读取。

//C语言
#include <stdio.h>

int main() {
	int n = 0, m = 0;		//n为学生数,m为操作数
	scanf("%d %d",&n, &m) ;
	int goal[n];
	for( i=0 ; i<n ; i++ )
	    scanf("%d",&goal[i]); //读入初始成绩
    char c;
    int a, b;
   	for( i=0 ; i < m ; i++ ) {
	    scanf("%c %d %d",&c, &a, &b); //读入初始成绩
	    //其他操作
	 }
	return 0;
}

//C++版本
#include<iostream> 		//输入输出头文件

int main() {
	int n = 0, m = 0;		//n为学生数,m为操作数
	cin >> n >> m;
	int goal[n];
	for( i=0 ; i<n ; i++ )
		cin >> goal[i];		//读入初始成绩
	char c;
    int a, b;
	for( i=0 ; i < m ; i++ ) {
		cin >> c >> a >> b;
		//其他操作
	}
	
	return 0;
}

3. 题目没规定输入的个数

每行包含两个整数a和b,对于每行输入对应输出一行a和b的和。
输入
1 2
3 4
5 6
输出
3
7
11

一般没有规定具体行数,都是用while循环来解决。

//C语言版本
#include <stdio.h>		//记得头文件
int main() {
   int a,b;
   while(scanf("%d %d", &a, &b) != EOF)
       printf("%d\n", a+b);

   return 0;
}

//C++版本
#include <iostream>
using namespace std;
int main() {
   int a,b;
   while(cin >> a >> b)
       cout << a+b << endl;
}
  • 5
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1 图论 3 1.1 术语 3 1.2 独立集、覆盖集、支配集之间关系 3 1.3 DFS 4 1.3.1 割顶 6 1.3.2 桥 7 1.3.3 强连通分量 7 1.4 最小点基 7 1.5 拓扑排序 7 1.6 欧拉路 8 1.7 哈密顿路(正确?) 9 1.8 Bellman-ford 9 1.9 差分约束系统(用bellman-ford解) 10 1.10 dag最短路径 10 1.11 二分图匹配 11 1.11.1 匈牙利算法 11 1.11.2 KM算法 12 1.12 网络流 15 1.12.1 最大流 15 1.12.2 上下界的网络的最大流 17 1.12.3 上下界的网络的最小流 17 1.12.4 最小费用最大流 18 1.12.5 上下界的网络的最小费用最小流 21 2 数论 21 2.1 最大公约数gcd 21 2.2 最小公倍数lcm 22 2.3 快速幂取模B^LmodP(O(logb)) 22 2.4 Fermat小定理 22 2.5 Rabin-Miller伪素数测试 22 2.6 Pollard-rho 22 2.7 扩展欧几里德算法extended-gcd 24 2.8 欧拉定理 24 2.9 线性同余方程ax≡b(mod n) 24 2.10 中国剩余定理 25 2.11 Discrete Logging(BL == N (mod P)) 26 2.12 N!最后一个不为0的数字 27 2.13 2^14以内的素数 27 3 数据结构 31 3.1 堆(最小堆) 31 3.1.1 删除最小值元素: 31 3.1.2 插入元素和向上调整: 32 3.1.3 堆的建立 32 3.2 并查集 32 3.3 树状数组 33 3.3.1 LOWBIT 33 3.3.2 修改a[p] 33 3.3.3 前缀和A[1]+…+A[p] 34 3.3.4 一个二维树状数组的程序 34 3.4 线段树 35 3.5 字符串 38 3.5.1 字符串哈希 38 3.5.2 KMP算法 40 4 计算几何 41 4.1 直线交点 41 4.2 判断线段相交 41 4.3 三点外接圆圆心 42 4.4 判断点在多边形内 43 4.5 两圆交面积 43 4.6 最小包围圆 44 4.7 经纬度坐标 46 4.8 凸包 46 5 Problem 48 5.1 RMQ-LCA 48 5.1.1 Range Minimum Query(RMQ) 49 5.1.2 Lowest Common Ancestor (LCA) 53 5.1.3 Reduction from LCA to RMQ 56 5.1.4 From RMQ to LCA 57 5.1.5 An algorithm for the restricted RMQ 60 5.1.6 An AC programme 61 5.2 最长公共子序列LCS 64 5.3 最长上升子序列/最长不下降子序列(LIS) 65 5.3.1 O(n^2) 65 5.3.2 O(nlogn) 66 5.4 Joseph问题 67 5.5 0/1背包问题 68 6 组合数学相关 69 6.1 The Number of the Same BST 69 6.2 排列生成 71 6.3 逆序 72 6.3.1 归并排序求逆序 72 7 数值分析 72 7.1 二分法 72 7.2 迭代法(x=f(x)) 73 7.3 牛顿迭代 74 7.4 数值积分 74 7.5 高斯消元 75 8 其它 77

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值