今天又是一天课,满课,很累哈,计组真的挺难的,但是多学学还是可以学明白。行吧,继续进入今天的ACM练习,现阶段都是主要练习Java到C++的语言过渡。
因为今天的题目多半都是昨天的延伸,我就不提供Java的对比代码了。
1.题目一
题目来自牛客网
B-A+B(2)_OJ在线编程常见输入输出练习场 (nowcoder.com)
呃,有啥疑问,t是多少就循环多少次呗。
然后记住C++的输入输出语句就行
上代码:
#include <iostream>
int main() {
// 读取数据组数 t
int t;
std::cin >> t;
// 处理每一组数据
for (int i = 0; i < t; i++) {
// 读取两个整数 a 和 b
int a, b;
std::cin >> a >> b;
// 计算并输出 a+b 的结果
std::cout << a + b << std::endl;
}
return 0;
}
2.题目二
也是计算a+b
代码示例:
#include <iostream>
using namespace std;
int main(){
// 在a和b都是0的时候结束
while(true){
int a;
int b;
// 给ab赋值
cin >> a;
cin >> b;
// 如果为0,就不输出结果了,然后直接结束循环
if(a == 0 && b == 0){
break;
}
// 如果至少一方不为0输出结果
cout << a + b << endl;
}
return 0;
}
3.题目三
成功将a+b净化为了a+b+c+...+n
那就直接展示吧~~学了那么多,这点还是可以拿捏的只是C++的语法不同罢了
代码示例:
#include <iostream>
using namespace std;
int main(){
// 先将a,b定义出来
int x;
// 然后进入死循环,直到遇到0
while(true){
int n;
cin >> n;
if(n == 0){
break;
}
int result = 0;
for(int i = 0; i < n; i++){
// 然后进行每次的累加求和
cin >> x;
result += x;
}
cout << result << endl;
}
return 0;
}
4.题目四
分析一下,第一行表示有多少组数据,
然后每行的第一个数就是这组数据的数量,简单~!~~
其实就是前几个题目的结合
代码示例:
#include <iostream>
using namespace std;
int main(){
// 先接收第一行的参数,获得所有的数据组的数量
int allLine;
cin >> allLine;
// 然后就可以进入allLine次数循环
for(int i = 0; i < allLine ; i++){
// 然后在这每次的循环中再进行每行的第一个数字次数的循环
int thisLine;
cin >> thisLine;
int result = 0;
for(int j = 0; j < thisLine; j++){
int x;
cin >> x;
result += x;
}
cout << result << endl;
}
return 0;
}
5.题目五
那这就需要自己来判断循环什么时候结束了
每一行的第一个数是这一行要计算的数据量
相比如前几个有明确的结束条件,这里的结束条件算是比较的隐蔽,
但是仔细一点仍然可以发现。
就是数据数据为Null的时候,就是结束的时候,所以结束条件需要写在前面即可。
代码示例:
#include <iostream>
using namespace std;
int main(){
// 首先接收开头的第一个数据
// 若数据为Null则结束循环
while(true){
int n;
if(!(cin >> n)){
// 为NULL(为0)则结束循环
break;
}
// 走到这里则不为0,而且我们还拿到了每行要取多少个元素相加
int result = 0;
for(int i = 0; i < n; i++){
int x;
cin >> x;
result += x;
}
// 返回数值,记得添加换行符
cout << result << endl;
}
return 0;
}
6.题目六
这里就没有每次很好的判断条件了。
在Java之中我可以很快的告诉你使用readLine()这个API来解决,但是在C++中我还是查询了一下,
可以使用std::getline读取一行数据
`std::getline` 是 C++ 标准库中的一个函数,用于从输入流中读取一行数据。它的基本用法如下:
```cpp
#include <iostream>
#include <string>
int main() {
std::string line;
// 逐行读取输入
while (std::getline(std::cin, line)) {
// 对读取到的一行数据进行处理
// ...
}
return 0;
}
```
在上述示例中,`std::getline` 函数被用来从标准输入流 (`std::cin`) 中逐行读取数据,并将每行的内容存储在名为 `line` 的字符串中。循环会继续执行,直到 `std::getline` 遇到文件末尾或者发生了读取错误。
你可以在循环中对读取到的每一行数据进行进一步处理,比如使用 `std::istringstream` 分割字符串或者进行其他操作。
如果你想指定一个定界符来分割行内的内容,你可以使用 `std::getline` 的另一个版本,指定第三个参数作为定界符:
```cpp
#include <iostream>
#include <string>
#include <sstream>
int main() {
std::string line;
// 逐行读取输入
while (std::getline(std::cin, line)) {
std::istringstream iss(line);
std::string token;
// 以空格为分隔符,逐个读取字符串
while (std::getline(iss, token, ' ')) {
// 对读取到的字符串进行处理
// ...
}
}
return 0;
}
```
在这个例子中,`std::getline(iss, token, ' ')` 使用空格作为分隔符,将 `iss` 流中的内容逐个读取到 `token` 字符串中。这样,你就可以逐个处理分隔开的字符串。
再详细说一下使用std::istringstream处理数据
`std::istringstream` 是 C++ 标准库中的一个类,用于将字符串当做输入流来处理。它可以从字符串中提取数据,就像 `std::cin` 从标准输入流中提取数据一样。以下是一个简单的示例,演示了如何使用 `std::istringstream`:
```cpp
#include <iostream>
#include <sstream>
#include <string>
int main() {
// 定义一个字符串
std::string input_str = "10 20 30 40 50";
// 使用 std::istringstream 对字符串进行处理
std::istringstream iss(input_str);
int num;
// 从 iss 中逐个读取整数并输出
while (iss >> num) {
std::cout << "Read: " << num << std::endl;
}
return 0;
}
```
在这个示例中,我们首先定义了一个包含空格分隔整数的字符串 `input_str`。然后,我们使用 `std::istringstream` 类创建了一个字符串流 `iss`,并将字符串 `input_str` 传递给它。接下来,我们使用 `while (iss >> num)` 循环,它会逐个从字符串流中读取整数,并输出到标准输出流中。
你可以使用类似的方法在你的程序中处理输入字符串。例如,你可以在循环中使用 `iss >> num` 读取整数,然后对这些整数进行累加等操作。
然后又有问题了
这里读取的iss中不是字符串吗,为什么可以直接和整数类型累加呢?
答: iss >> num
会从字符串流 iss
中读取一个字符串,并使用 std::stoi
将其转换为整数。这样,你就可以逐个读取字符串并将其转换为整数后进行累加。
还有一点就是,在C++中其实是没有string类型的,你需要使用字符数组替代或者采用标准函数库
#include <string>中的 std::string
代码示例:
#include <iostream>
#include <sstream>
#include <string>
using namespace std;
int main(){
// 先定义出接收这一行字符串的数据
string line;
// 开始循环获取
while(getline(cin, line)){
istringstream iss(line);
int num;
int result = 0;
// 逐个读取整数并且累加
while(iss >> num){
result += num;
}
cout << result << endl;
}
return 0;
}
完美运行!
然后我问了基地学习C++的负责人又给出了如下代码,也可以完美运行,更实用
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n;
while(cin >> n)
{
int sum = n;
while(cin.get() != '\n')
{
int m;
cin >> m;
sum += m;
}
cout << sum << endl;
}
return 0;
}
结语
今天又学习到了一些C++的语法,和一些很使用的操作,又是收获满满的一天\(^o^)/
ヾ( ̄▽ ̄)Bye~Bye~