/*
一辆运送快递的货车。运送的快递均放在大小不等的长方形快递盒中
为了能够装载更多的快递 同时不能让货车超载
需要计算最多能装多少个快递
快递的体积不受限制
快递数量最多1000个
货车载重量50000
输入描述:
第一行输入 每个快递重量 用逗号分隔
如5,10,2,11
第二行 输入 货车的载重量
如20
不需要考虑异常输入
输出描述:
输出最多能装多少个快递
货车的载重量为20 最多只能放3种快递 5,10,2因此输出3
示例1:
输入
5,10,2,11
20
输出
3
*/
此解法刚开始输入的选择方式有点复杂。。。。。。用的string 存放输入的数据 。把逗号问题用字符串分隔的处理方式。着实有点笨重。
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int print(int weight,vector<int>&arr,int p)
{
int count = 0;
for (int i = 0; i < arr.size(); i++)
{
if (weight<= p)
{
weight +=arr[i];
count++;
}
if (weight > p)
{
return count-1;
}
}
}
int main()
{
string num;
string s1;
vector<int>arr;
int pos = 0, p = 0, weight = 0;
cin >> num;
num += ',';
cin >> p;
for (int i = 0; i < num.size(); i++)
{
if (num[i] == ',') {
string s1 = num.substr(pos, i - pos);
arr.push_back(atoi(s1.c_str()));
pos = i+1;
}
}
sort(arr.begin(), arr.end());
int res=print(weight,arr,p);
cout << res;
return 0;
}
本题输入的字符串转换成各个货物的重量的方法用的是:先以字符串形式存放(因为货物重量会是双数,转换时要转换字符串是两个或以上,防止一个字符串转成多个数据),再放入到int容器时atoi转换待放入的元素。
有没有更好的方法?
本题是应该每次输入的数据都应该是“原本”的数据类型(int),逗号在这里可以巧妙的处理,因为:
int temp;
cin >> temp;
arr.push_back(temp);
cout << temp;
之后加上循环,getchar()处理最后一个输入的数据 ,是换行就退出。
while (cin >> temp) {
arr.push_back(temp);
if (getchar() == '\n')break;
}
cin>> 输入的数据编译器发现不是temp的int型,就退出输入那行代码, 然后继续添加数据,没有换行符继续cin,一直循环往复,最后遇到换行符结束循环。