1
1.小明有N元钱,M个朋友。汉堡的原价是10元,小明可以和朋友团购,每个朋友可以让汉堡的价格减少1元,最低只能降到5元。求:小明最多可以买多少个汉堡,花费多少钱。
例:
输入:
3
100 0
20 6
60 5
输出:
10 100
2 14
6 55
#include <stdlib.h>
#include <stdio.h>
void func(int money, int friends)
{
int cnt = 0;
int sum = 0;
if (money >= 5) {
int price_5_max = friends / 5;
int price_extra = 10 - friends % 5;
if (money - price_5_max * 5 <= 0) {
cnt = money / 5;
sum = cnt * 5;
}
else {
cnt += price_5_max;
sum += price_5_max * 5;
if (money - sum >= price_extra) {
cnt += 1;
sum += price_extra;
int full_price_cnt = (money - sum) / 10;
cnt += full_price_cnt;
sum += full_price_cnt * 10;
}
}
}
printf("%d %d\n", cnt, sum);
}
int main()
{
int n = 0;
scanf_s("%d", &n);
int* arr = (int*)malloc(2 * sizeof(int) * n);
for (int i = 0; i < 2 * n; i = i + 2) {
scanf_s("%d%d", &arr[i], &arr[i + 1]);
}
for (int i = 0; i < 2 * n; i = i + 2) {
func(arr[i], arr[i + 1]);
}
free(arr);
return 0;
}
2
2.将字符串最长的重复字符删去,记录删去的次数。如abbc->ac->c->a->空 输出4 abbcccb->abbb->a->空 输出3。现在输入字符串的长度与字符串,输出结果。
例:
输入:
7
abbcccb
输出:
3
#include <string>
#include <iostream>
using namespace std;
string single_sort(string s, int* cnt) {
int len = 1;
int max = 1;
int index = 0;
for (int i = 1; i < *cnt; ++i) {
if (s[i] == s[i - 1]) {
++len;
if (len > max) {
max = len;
index = i;
}
}
else {
len = 1;
}
}
for (int i = index - max + 1; i < *cnt - max ; ++i) {
s[i] = s[i + max];
}
for (int i = *cnt - 1; i > *cnt -1 - max; --i) {
s[i] = ' ';
}
*cnt -= max;
return s;
}
int func(string s, int* len) {
static int count = 0;
if (*len == 0) {
return count;
}
string news = single_sort(s, len);
count++;
func(news, len);
return count;
}
int main() {
int len;
string str;
cin >> len;
cin >> str;
cout << func(str, &len);
return 0;
}