这篇记录vivo提前批笔试时,题目会做,但不知道怎么读取输入的惨痛经验。
写在开头
- 学会输入输出的写法很重要,尤其是C/C++。。。
- 据说用
scanf
和printf
会比cin
和cout
快很多,因此尽量使用前者;
一行整数输入,空格间隔(个数未知)
输入描述:
一组空格分开分隔的员工工号列表
输出描述:
幸运员工总人数,未找到时输出0
这种情况下,需要每次读取并判断单个数字,并记录,最后输出。代码如下:
#include<bits/stdc++.h>
using namespace std
int main(){
int id = 0;
while(scanf("%d", &id) != EOF){
/* write your code here */
}
return 0;
}
注意在本地调试时,应该输入crtl
+z
来中止输入。
多行整数输入,逗号间隔(个数未知)
输入描述:
第一行输入最大载重量C,是一个整数
第二行输入依次为每个集装箱的重量W(i),用整数表示,W(i)要小于等于C,用逗号“,”分隔
第三行输入依次为每个集装箱对应货物的价值V(i),用整数表示,用逗号“,”分隔
输出描述:
为一个整数,表示货运总价值
这种情况下,需要分别存储不同的数据(C,W(i)和V(i)),按行读取。代码如下:
#include<bits/stdc++.h>
using namespace std
int main(){
vector<int> weight;//the weight of each container
vector<int> value;//the value of goods in each container
int c = 0;//maximum capacity
char ch;
scanf("%d", &c);
int curr_w = 0;
int curr_v = 0;
do{
scanf("%d",&curr_w);
weight.push_back(curr_w);
ch = getchar();
}while(ch!='\n');
do{
scanf("%d",&curr_v);
value.push_back(curr_v);
ch = getchar();
}while(ch!='\n');
/* write your code here */
return 0;
}
首先读取C的值,再通过do-while
循环依次读取每个集装箱的重量,直至getchar()
捕获换行符\n
,同理读取对应货物价值。
其他技巧
平时在本地调试程序时,往往需要输入输出多次才能得到正确结果。每次都需要按一串数字字符,效率很低。因此,在本地调试时,可以在读取输入前加上:
int main(){
freopen("input.txt","r",stdin);
/* write your code here */
fclose(stdin);
}
再提前把输入写入txt文件,每次运行的时候就不再需要人为输入。记得提交之前将这两行注释,或者可以加上条件编译:
#define LOCAL_DEBUG
int main(){
#ifdef LOCAL_DEBUG
freopen("input.txt","r",stdin);
#endif
/* write your code here */
#ifdef LOCAL_DEBUG
fclose(stdin);
#endif
}