题目1:
输入:a:5,b5,c:2@a:1,b:2
输出:a:4,b:3,c:2
输入由两部分组成,全量字符@已用字符,用@分开。全量字符a:5表示字符a总共有5个,已用字符a:1表示a已经用了1个.
输出的为剩下可用字符以及对应数量
要求输出的顺序和输入的顺序一致。
下面为代码:
#include <iostream>
#include <vector>
using namespace std;
int split_str(string source, int len, vector<pair<char, int>>* vt)
{
char ch;
int num;
char ch_tmp;
int num_tmp;
int i = 0;
char str[20];
ch = source[i];
while (i < len && ch != '\n')
{
memset(str, 0x00, sizeof(str));
ch_tmp = ch;
i++;/*冒号*/
/*数字部分*/
while (i < len && ch != ',') {
i++;
ch = source[i];
if (ch == ',' || i==len) {
num = atoi(str);
auto p = std::make_pair((ch_tmp), (num));
vt->push_back(p);
break;
}
snprintf(str,sizeof(str),"%s%c",str,ch);
}
if (i >= len)break;
/*下个字符串*/
i++;
ch = source[i];
}
return 0;
}
int main() {
int i = 0;
int flag = 0;
int pos = 0;
int len = 0;
string org_str;
string all_str;
string sub_str;
vector<pair<char, int>> all_mp;
vector<pair<char, int>> sub_mp;
vector<pair<char, int>>* p;
cin >> org_str;
len = org_str.length();
pos = org_str.find('@', 0);
all_str = string(org_str, 0, pos);
sub_str = string(org_str, pos + 1, len - 1 - pos);
p = &all_mp;
split_str(all_str, all_str.length(), p);
p = &sub_mp;
split_str(sub_str, sub_str.length(), p);
flag = 0;
for (auto iter : all_mp) {
for (auto iter2 : sub_mp) {
if (iter.first == iter2.first) {
cout << iter.first << ":" << iter.second - iter2.second ;
flag = 1;
break;
}
}
if(flag !=1) {
cout << iter.first << ":" << iter.second ;
}
flag = 0;
if (iter.first != all_mp.back().first)
cout << ",";
}
return 0;
}
题目2:
输入: 545 5
输出:107 108 109 110 111
输入有个两个正整数,第一个为总和sum,第二个为数目n
输出为n个连续正整数的和,这个和与sum相等。如果没有符合的输出,则返回-1
#include<iostream>
using namespace std;
int main()
{
int all;
int num;
int sum = 0;
while(1)
{
sum = 0;
cin >> all >> num;
if (num > 2 && num % 2 == 0 && all % 2 != 0) {
return -1;
//cout << "err 大于2的偶数个数相加,不可能有奇数的和 =" << num << endl;
//cout << "===================================================" << endl;
//continue;
}/*大于2的偶数个数相加,不可能有奇数的和*/
int mid = int ((all / num) + (num%2!=0?0:1));
//cout <<"mid"<< mid << endl;
int head = mid - int(num / 2);
//cout <<"head"<< head <<" "<< int (num/2)<< endl;
if (head < 1) {
return -1;
//cout << "err head=" << head << endl;
//cout << "===================================================" << endl;
//continue;
}
else
{
for (int i = 0; i < num; i++)
{
sum += (head + i);
//cout << sum << "->";
}
//cout << endl;
if (sum == all)
{
for (int i = 0; i < num; i++)
cout << head + i << " " ;
}
else {
return -1;
//cout << "err sum=" << sum << endl;
//cout << "===================================================" << endl;
//continue;
}
cout << endl;
}
//cout << "===================================================" << endl;
return 0;
}
return 0;
}