没有合适的资源?快使用搜索试试~ 我知道了~
资源详情
资源评论
资源推荐

1、
【促销活动】
题目描述:系统需要提供人民币(CNY)、美元(USD)、英镑(GBP)、港币(HKD) 价值转换功能。为了简单处理,题目的说明和考生调试可以用下面的默认汇率:
1 CNY = 2 HKD
1 USD = 8 CNY
1 GBP = 2 USD
请按照汇率实现货币最大兑换和最小兑换功能。例如:最大兑换,即尽量往价值高的货币兑换: Currency(1200, CNY) = 75 GBP
Currency(127, HKD) = 3 GBP 1 USD 7 CNY 1 HKD
最小兑换,即尽量往价值低的货币兑换,直接转换为多少 HKD 即可。Currency(20, CNY) = 40 HKD
汇率是实时变化的,但是短期内大致符合当前价值规律,即相同数值的货币,价值满足 GBP>USD>CNY>HKD,每组输入数据都会有不同的输入汇率,需要按设置的汇率进行兑换。
解答要求
时间限制: 1000ms, 内存限制: 64MB 输入
示例输入如下:2 8 2 127 HKD MAX
(1) 第 1 个数字表示 1CNY 可以换成多少 HKD。
(2) 第 2 个数字表示 1USD 可以换成多少 CNY
(3) 第 3 个数字表示 1GBP 可以换成多少 USD
(4) 第 4 个和第 5 个 表示 数量和货币类型(大写)
(5) 第 6 个表示最大兑换(MAX)还是最小兑换(MIN)
(6) 需要校验前 4 个数字必须是大于 0 的整数。不合法直接返回”ERROR”
(7) 货币字母大写简称
(HKD、CNY、USD、GBP)、兑换方式字母大写简称(MIN/MAX)需要判断合法性,只有全部字母大写并且内容相同才是合法。
(8) 任何其它形式(空缺、大小写不一致、出现负数、小数点、非法字符等)均不合法,直接输出字符串 “ERROR”
(9) 每个输入数据为一行,前后无空格,数据之间以 1 个空格间隔
(10) 转换代码不需要考虑整数溢出输出
输出字符串 “3 GBP 1 USD 7 CNY 1 HKD”
(1) 注意输出每组货币都是 数字+空格+货币种类简称
(2) 多组不同货币也是以 1 个空格分开,例如 3 GBP 1 USD (3)输出字符串前后没有空格
(4) 输出字符串前后没有双引号(“)
(5) 若输入不合法直接输出字符串”ERROR”
(6) 最大输出时遇到结果为 0 的单位不需要输出。例如输入:2 8 2 17 HKD MAX
错误输出:0 GBP 1 USD 0 CNY 1 HKD 正确输出:1 USD 1 HKD
样例
输入样例 1 复制
2 8 2 127 HKD MAX
1 6 1 127 HKD max
2 8 2 17 HKD MAX
输出样例 1
3 GBP 1 USD 7 CNY 1 HKD
ERROR
1 USD 1 HKD
#include <string>
#include <vector>
#include <iostream>
using namespace std;
int Split(string input, vector<string>& output, string pattern);
string MaxExchange(int count, int cnyToHkd, int usdTocny, int gbpTousd);
string MinExchange(int count);
bool ParamValid(vector<string> param, string& style, string& type, int& cnyToHkd, int& usdTocny, int& gbpTousd,
int& count);
int main(int argc, char** argv)
{
string intput_string;
while (getline(cin, intput_string))
{
// 人民币转港币汇率 美元转人民币汇率 英镑转美元的汇率
int cnyToHkd = 2, usdTocny = 8, gbpTousd = 2;
int count = 0;
string style, type;
vector<string> inputArray; Split(intput_string, inputArray, " ");
// 输入参数转换为对应的值,并做验证
if (!ParamValid(inputArray, style, type, cnyToHkd, usdTocny, gbpTousd, count))
{

cout << "ERROR" << endl;
continue;
}
// 将金额全部转换为汇率最小的港币HKD
if (style == "HKD") // 港币
{
count = count;
}
else if (style == "CNY") // 人民币
{
count = count * cnyToHkd;
}
else if (style == "USD") // 美元
{
count = count * usdTocny * cnyToHkd;
}
else if (style == "USD") // 英镑
{
count = count * gbpTousd * usdTocny * cnyToHkd;
}
if (type == "MAX")
{
cout << MaxExchange(count, cnyToHkd, usdTocny, gbpTousd) << endl; continue;
}
cout << MinExchange(count) << endl;
}
return 0;
}
int Split(string input, vector<string>& output, string pattern)
{
string::size_type pos;
input += pattern; //扩展字符串以方便操作
for (int i = 0; i < input.size(); i++)
{
pos = input.find(pattern, i); if (pos < input.size())
{
string s = input.substr(i, pos - i); if ((s != " ") && (!s.empty()))
{
output.push_back(s);
}
i = pos + pattern.size() - 1;
}
}
return 0;
}
string MaxExchange(int count, int cnyToHkd, int usdTocny, int gbpTousd)
{
int gbpCount = count / (cnyToHkd * usdTocny * gbpTousd); // 英镑整数
int gbpnext = count % (cnyToHkd * usdTocny * gbpTousd); // 英镑剩余的部分
int usdCount = gbpnext / (cnyToHkd * usdTocny);// 美元整数
int usdnext = gbpnext % (cnyToHkd * usdTocny); // 美元剩余的部分
int cnyCount = usdnext / (cnyToHkd); // 人民币整数
int cnynext = usdnext % cnyToHkd; // 人民币剩余的部分
string result;
result.append(gbpCount == 0 ? "" : to_string(gbpCount) + " GBP ");
result.append(usdCount == 0 ? "" : to_string(usdCount) + " USD ");
result.append(cnyCount == 0 ? "" : to_string(cnyCount) + " CNY ");
result.append(cnynext == 0 ? "" : to_string(cnynext) + " HKD");
return result;
}
string MinExchange(int count)
{
return to_string(count) + " HKD";
}
bool ParamValid(vector<string> param, string& style, string& type, int& cnyToHkd, int& usdTocny, int& gbpTousd,
int& count)
{
if (param.size() != 6)
{
return false;
}
vector<string> style_vector; style_vector.push_back("GBP"); style_vector.push_back("USD");
style_vector.push_back("CNY"); style_vector.push_back("HKD");
vector<string> type_vector; type_vector.push_back("MAX"); type_vector.push_back("MIN");
cnyToHkd = stoi(param[0]);
usdTocny = stoi(param[1]); gbpTousd = stoi(param[2]); count = stoi(param[3]);
//前四个是大于0的整数
if ((cnyToHkd <= 0) || (usdTocny <= 0) || (gbpTousd <= 0) || (count <= 0))
{
return false;

}
bool style_flag = false;
for (int i = 0; i < style_vector.size(); i++)
{
if (param[4] == style_vector[i])
{
style_flag = true;
}
}
if (!style_flag)
{
return false;
}
style = param[4];
bool type_flag = false;
for (int i = 0; i < type_vector.size(); i++)
{
if (param[5] == type_vector[i])
{
type_flag = true;
}
}
if (!type_flag)
{
return false;
}
type = param[5];
return true;
}
2、 【拆分输出字符串】
题目描述:连续输入字符串(输出次数为 N,字符串长度小于 100),请按长度为 8 拆分每个字符串后输出到新的字符串数组,长度不是 8 整数倍的字符串请在后面补数字 0,空
字符串不处理。
首先输入一个整数,为要输入的字符串个数。
例如:
输入:2
abc
12345789
输出:abc00000
12345678
90000000
#include <iostream>
#include <vector>
#include <string>
using namespace std;
int main(int argc, char** argv)
{
int N;
while (cin >> N)
{
vector<string>string_vector;
for (int i = 0; i < N; i++)
{
string input = "";
cin >> input;
if (!input.empty())
{
string_vector.push_back(input);
}
}
for (int i = 0; i < string_vector.size(); i++)
{
while (string_vector[i].size() > 8)//只要是字符串长度大于8
{
cout << string_vector[i].substr(0, 8) << endl;//从0开始,输出长度为8个字符
string_vector[i] = string_vector[i].substr(8);//更新字符串从第8个位置后开始
}
cout << string_vector[i].append(8 - string_vector[i].size(), '0') << endl;//调用append函数补0
}
}
return 0;
}

3、 【一个正整数到 Excel 编号之间的转换】
题目描述:完成从一个正整数到 Excel 编号之间的转换。
用过 excel 的都知道 excel 的列编号是这样的:
abc....zaaabac....azbabbbc....yzzazbzc....zzaaaaabaac....
分别代表以下编号:
123....26272829....52535455....676677678679....702703704705....请写个函数,完成从一个正整数到这种字符串之间的转换。
原型:intTranslate(intN,string&ans)
功能:正整数到 Excel 编号字符串转换
输入:N
输出:ans
返回:0
分析:
我的第一感觉是 A,B,C...,Z,AA,AB,AC,...ZZ,AAA,AAB......可以转换成“进制数”表示形式,由于一共 26 个英文字母,可以转换成 26 进制表示形式。转换成 26 进制形式后 26 进制
数 1 对应 A、2 对应 B....25 对应 Y,这样 Z 只能对应 26 进制数 10。而十进制数 27 转换成 26 进制数为 11 即可对应成 AA,十进制数 52 转换成 26 进制数为 20 对应为 AZ。所 有
我们需要对能被 26 整除的正整数进行特殊处理。
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int Translate(int N, string& ans)
{
if ((N <= 0))
{
return -1;
}
ans = "";
while (N > 0)
{
N -= 1;
ans += ((N % 26) + 'A');
N /= 26;
}
reverse(ans.begin(), ans.end());
return 0;
}
int main(int argc, char** argv)
{
int num;
while (1)
{
cin >> num;
string str;
Translate(num, str);
cout << str << endl;
}
return 0;
}

4、 【字符串简单数据解压缩】
题目描述:将一段压缩后的字符串解压缩,并且排序输出
解压规则:
每个字符串后面跟随一个数字,表示这个字符串的重复次数。例如,“a5”解压缩的结果为“aaaaa”;“ abc3”解压缩后的结果为“abcabcabc”。
排序规则:
1、根据每个字符串的重复次数升序排序,然后输出结果。例如,“a3b2”,输出的结果为“bbaaa”。
2、如果字符重复次数一样,则根据 ASCII 编码顺序做升序排序,然后输出结果。例如,“b2a2”,输出的结果为“aabb”
输入描述:
输入的原始字符串仅包含字母和数字
输出描述:
输出的结果字符串仅包含字母
示例 1
输入:a11b2bac3bad3abcd2
输出:bbabcdabcdbacbacbacbadbadbadaaaaaaaaaaa
#include<iostream>
#include<string>
#include<vector>
#include<map>
#include<algorithm>
using namespace std;
typedef struct TypeN
{
vector<string> vector_string;
}TypeN;
int main(int argc, char** argv)
{
string input_string;
while (cin >> input_string)
{
string temp;
int len = input_string.size();
int i = 0;
int num = 0;
int flag = 0;
map<int , TypeN> typen_map;
while (i < len)
{
if (input_string[i] >= '0' && input_string[i] <= '9')
{
num = num * 10 + input_string[i] - '0';
i++;
while (input_string[i] >= '0' && input_string[i] <= '9' && i < len)
{
num = num * 10 + input_string[i] - '0';//字符转为10进制数字
i++;
}
TypeN string_struct;
if (typen_map.find(num) == typen_map.end())//键值对不存在
{
typen_map[num] = string_struct;
}
else
{
string_struct = typen_map[num];
}
string mm = "";
for (int j = 0; j < num; j++)
{
mm += temp;
}
string_struct.vector_string.push_back(mm);
typen_map[num] = string_struct;
temp = "";
num = 0;
}
else
{
temp.push_back(input_string[i++]);
}
}
for (int i = 0; i < 1024; i++)
{
TypeN sn = typen_map[i];
sort(sn.vector_string.begin(), sn.vector_string.end());
for (int i = sn.vector_string.size() - 1; i > -1; i--)
{
cout << sn.vector_string[i];
}
}
cout << endl;
}
return 0;
}
剩余144页未读,继续阅读






小菜鸟_程序员
- 粉丝: 2
- 资源: 5
上传资源 快速赚钱
我的内容管理 收起
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


会员权益专享
安全验证
文档复制为VIP权益,开通VIP直接复制

评论0