注意以下样例只是一个样例,还可以有很多别的实现方法
基本语法:
输入输出:
正常篇-输入问题:
int a;
cin>>a;
先定义个变量,然后输入。这个变量可以使double,float,int,char,bool等等类型。
Sample Input
2 5 100
Sample Output
2 10我们可以用以下代码解决输入问题。
int n,u;
cin>>n;
for(int i = 0;i < n; i++){
cin>>u;
}
但是换一种情况,告诉输入某个数的时候输入结束,例如中文练习题C(4144 Simple String Transformation)
输入样例
3 abc 4 AAbc 0
输出样例
def aaef我们可以采用如下代码解决
int n;
while(cin>>n){
if(n == 0)
break;
... //other code
}
这样不停输入数字,直到输入为0结束,跳出循环即可。
不过以上都是通过输入判断是否结束了,如果遇到输入为EOF(end of file)就是文件结束才结束输入怎么办呢?
例如 第一次练习A (2015 Keep on Truckin')
Sample Input:
180 160 170
Sample Output:
CRASH 160
那我们的解决方法如下:
int a,b,c;
while(cin>>a>>b>>c){
... //other code
}
例如第一次练习 D(1153 Word Reversal)
方法1:我们利用string数组来保存输入
string a;
int n;
cin>>n;
getchar(); //由于第一个整数输入后接了一个换行符'\n',这个字符我们要读入才能正常读取下一行
while(n--)
{
getline(cin,a);
... //other code
}
有了这个就可以了吗?其实我们还有很多别的方法。
我们可以用char 数组(似乎还没学到,但是很快就学了,提前告诉你们)
方法2:
char a[100];
int n;
cin>>n;
getchar(); //理由同上 你需要使用到 cstdio 这个头文件 #include<cstdio>
while(n--){
gets(a);
... //other code
}
如果想获取数组a的长度,代码如下
int length = strlen(a)
so,到这里感觉自己会数组了,也是不错的,但是这样真的就完了么?
如何体现更高水平呢,秀一秀黑科技呢(哈哈,也就只能跟大一的说是黑科技了)
方法3:采用getchar()读入字符
char a[100];
int n;
cin>>n;
getchar(); //理由同上
while(n--){
int length = 0;
while(true){
a[length] = getchar(); //getchar()函数就是获取一个字符输入
if(a[length] == '\n') // '\n' 表示换行符
break;
length++;
}
a[length] = '\0'; // '\0'表示字符数组的终止字符
//cout<<a<<endl;
... //other code
}
所以到这里,感觉到一点点的梯度上升吗?
在方法三种,额外的知识是,你要知道一些编码知识,这里特指ASCII,'\0'对应空字符,也是表示字符数组结尾的标志,'\n'是换行字符
参考资料:http://baike.baidu.com/link?url=tSj0V1ALtbxUCo27_IozDqqT2MNrUk7zqxAbIlTrr3yt_m-eEzp24QskmKQFvHQoKsWEWOBC2ElPGLZfXOdN4q
如果明白了这个,那么任何的输入都不会难倒你的。
接下来是输出的问题:
正常篇-输出问题:
1. 1089 A+B for Input-Output Practice (I)
1 5 10 20
6 30
2.1096A+B for Input-Output Practice (VIII)
Sample Input
3
4 1 2 3 4
5 1 2 3 4 5
3 1 2 3
Sample Output
10
15
6
3 4 1 2 3 4 5 1 2 3 4 5 3 1 2 3
10 15 6
int n;
cin>>n;
int flag = 0; // 这是一个非常常用的标记方法
while(n--){
if(flag == 1)
cout<<endl;
flag = 1;
... //other code
}
这里我们可以看到新定义了一个flag标记的变量,如果flag==1,那么输出换行,因为此时,我们知道之前一定有一行输出的,进入这次循环的时候,一定会产生一次新的输出,那么我们有理由确定,这个时候需要输出一个空白行。
PS:1089-1096都是简单的a+b问题,就是输入输出控制的联系,非常建议大家去做一做。
3.5918 sequence I 这题别做啦,就是为了告诉你们还有别的要求的
2 6 3 1 1 2 3 1 2 3 1 2 3 6 3 2 1 3 2 2 3 1 1 2 3
Case #1: 2 Case #2: 1
2 3 2 1 2 3 1 3 2 3 3 2 3 3 3 1 1 2 2
Case #1: 3 1 Case #2: 2 3
循环:
Sample Input
2 5 100
Sample Output
2 10
第一种:
int n;
cin>>n;
for(int i = 0;i < n; i++){
... //other code
}
第二种:
int n;
cin>>n;
while(n--){
... //other code
}
第三种:
int n;
cin>>n;
do{
}while(n--);
特别的:
例如中文练习题C(4144 Simple String Transformation)
输入样例
3 abc 4 AAbc 0
输出样例
def aaef
我们还可以有第四种姿势写循环
int n;
while(cin>>n,n!=0){
... //other code
}
是不是很神奇,判断条件写到while的括号中即可。
百度搜索:
第二个:C++手册查询
孤独是一个人的狂欢,狂欢是一群人的寂寞。祝你们在学习的不归路上,越走越深。