1、
题目描述:
给定一个长度为 n 的数组,数组元素为 a1, a2, . . , an,每次能删除任意 a 的任意一位,求将所有数字变成 0 最少需要几步。例如 103 若删除第 1 位则变成 3; 若删除第 2 位则变成13; 若删除第 3 位则变成 10。
输入
输入描述第一行一个正整数 n 代表数组长度。接下来一行 n 个数第 j 个数代表 a。
输出
输出一行一个数代表答案。
样例输入
5
10 13 22 100 30
样例输出
7
提示
数据范围:
1 ≤ n ≤ 10^5
0< ai< 10^9
2、解答
#include <iostream>
#include <vector>
#include <sstream> // 用于字符串流
int main()
{
int n, count = 0;
std::string line;
std::cin >> n;
std::cin.ignore();//忽略换行符,拿到下一行数据
std::vector<int> data;
std::getline(std::cin, line); // 读取一整行
// 使用字符串流来解析这行数据
std::istringstream iss(line);
int number;
while (iss >> number) { // 当字符串流中还有整数时,继续读取
data.push_back(number); // 将读取的整数添加到向量中
}
for (int j = 0; j < n; j++)
{
if (data[j] == 0)
continue;
if (data[j] / 1000000000)
{
data[j] = data[j] % 1000000000;
count++;
}
if (data[j] / 100000000)
{
data[j] = data[j] % 100000000;
count++;
}
if (data[j] / 10000000)
{
data[j] = data[j] % 10000000;
count++;
}
if (data[j] / 1000000)
{
data[j] = data[j] % 1000000;
count++;
}
if (data[j] / 100000)
{
data[j] = data[j] % 100000;
count++;
}
if (data[j] / 10000)
{
data[j] = data[j] % 10000;
count++;
}
if (data[j] / 1000)
{
data[j] = data[j] % 1000;
count++;
}
if (data[j] / 100)
{
data[j] = data[j] % 100;
count++;
}
if (data[j] / 10)
{
data[j] = data[j] % 10;
count++;
}
if (data[j])
count++;
}
std::cout << count << std::endl;
return 0;
}
关键代码
代码段中,使用了 std::getline
来从标准输入读取一整行数据,然后使用 std::istringstream
来解析这行数据中的整数,并将它们存储到一个 std::vector<int>
容器中。这是一个常见的模式,用于处理和转换由空格分隔的输入数据。下面是对每个步骤的详细解释:
std::getline(std::cin, line); // 读取一整行
- 这行代码使用
std::getline
函数从标准输入(通常是键盘输入)读取一整行文本,并将其存储在字符串变量line
中。这种方法可以读取包含空格的整行输入,直到遇到换行符。
std::istringstream iss(line);
- 创建了一个
std::istringstream
对象iss
,并用之前从标准输入读取的字符串line
初始化它。std::istringstream
是从<sstream>
头文件中提供的一个类,它允许我们将字符串作为流来处理,这样可以使用类似于从文件或标准输入读取的方式来从字符串中提取数据。
int number;
while (iss >> number) { // 当字符串流中还有整数时,继续读取
- 在这个循环中,
iss >> number
尝试从iss
字符串流中提取一个整数到变量number
中。如果成功,表达式的结果为true
,循环继续。如果遇到非整数数据或流结束,表达式结果为false
,循环停止。
data.push_back(number); // 将读取的整数添加到向量中
}
- 每次循环时,如果成功从流中读取了一个整数,就使用
push_back
方法将这个整数添加到std::vector<int>
类型的向量data
中。这样,所有从输入行中读取的整数都会被依次存储在data
向量中。
这种方法非常适合于处理和解析由空格分隔的整数输入,可以灵活地应用于多种需要从文本行中提取多个数据项的场景。