P1089 [NOIP2004 提高组] 津津的储蓄计划
题目描述
津津的零花钱一直都是自己管理。每个月的月初妈妈给津津 300 元钱,津津会预算这个月的花销,并且总能做到实际花销和预算的相同。
为了让津津学习如何储蓄,妈妈提出,津津可以随时把整百的钱存在她那里,到了年末她会加上 20% 还给津津。因此津津制定了一个储蓄计划:每个月的月初,在得到妈妈给的零花钱后,如果她预计到这个月的月末手中还会有多于 100元或恰好 100 元,她就会把整百的钱存在妈妈那里,剩余的钱留在自己手中。
例如 11月初津津手中还有 83 元,妈妈给了津津 300 元。津津预计11月的花销是 180 元,那么她就会在妈妈那里存 200 元,自己留下 183 元。到了 11 月月末,津津手中会剩下 3 元钱。
津津发现这个储蓄计划的主要风险是,存在妈妈那里的钱在年末之前不能取出。有可能在某个月的月初,津津手中的钱加上这个月妈妈给的钱,不够这个月的原定预算。如果出现这种情况,津津将不得不在这个月省吃俭用,压缩预算。
现在请你根据 2004 年 1 月到 12 月每个月津津的预算,判断会不会出现这种情况。如果不会,计算到 2004 年年末,妈妈将津津平常存的钱加上 20% 还给津津之后,津津手中会有多少钱。
输入格式
12 行数据,每行包含一个小于 350 的非负整数,分别表示 11 月到 12 月津津的预算。
输出格式
一个整数。如果储蓄计划实施过程中出现某个月钱不够用的情况,输出 −X,X 表示出现这种情况的第一个月;否则输出到 2004 年年末津津手中会有多少钱。
注意,洛谷不需要进行文件输入输出,而是标准输入输出。
代码
#include<stdio.h>
int main() {
int a[20], ans = 0, b = 0;
for (int i = 1; i <= 12; i++) {
scanf("%d", &a[i]);
}
for (int i = 1; i <= 12; i++) {
b += 300 - a[i];
if (b >= 100) {
ans += b / 100;
b = b % 100;
}
if (b < 0) {
printf("-%d\n", i);
return 0;
}
}
printf("%d", 120 * ans+b);
return 0;
}
P1014 [NOIP1999 普及组] Cantor 表
题目描述
现代数学的著名证明之一是 Georg Cantor 证明了有理数是可枚举的。他是用下面这一张表来证明这一命题的:
我们以 Z 字形给上表的每一项编号。第一项是 1/1,然后是 1/2,2/1,3/1,2/2,…
输入格式
整数N(1≤N≤107)。
输出格式
表中的第 N 项。
得到规律
代码
#include<stdio.h>
int main() {
int n = 0;
scanf("%d", &n);//第几个
int a=0, b=n;
while (b > 0) {
b = n;
a++;
b = b - (a + 1) * a / 2;
//求区间 <-b减去的是一个等差数列求和公式,主要是为了求出n位于哪一个区间
}
if (a % 2 == 0) {
printf("%d/%d\n", a + b, 1 - b);
}
else {
printf("%d/%d\n", 1 - b, a + b);
}
return 0;
}
P5015 [NOIP2018 普及组] 标题统计
题目背景
NOIP2018 普及组 T1
题目描述
凯凯刚写了一篇美妙的作文,请问这篇作文的标题中有多少个字符? 注意:标题中可能包含大、小写英文字母、数字字符、空格和换行符。统计标题字符数时,空格和换行符不计算在内。
输入格式
输入文件只有一行,一个字符串 s。
输出格式
输出文件只有一行,包含一个整数,即作文标题的字符数(不含空格和换行符)。
代码
#include<stdio.h>
#include<string.h>
int main() {
char a[200000];
//scanf("%s", a);
fgets(a, sizeof(a), stdin);
int count = 0;
int len = strlen(a);
for (int i = 0; i < len-1; i++) {
if (a[i] == ' ')continue;
count++;
}
printf("%d", count);
return 0;
}
P8830 [传智杯 #3 练习赛] 评委打分
题目描述
小 A 参加一个综艺节目。一共有 n(3≤n≤106) 名评委参与打分(分数范围是 0 到 100 的整数),每个评委依次亮出自己的得分。
为了节目效果,要求从第三个评委开始,每当第 ii 个评委给出打分后,立刻计算出出这个选手在前 ii 名评委的打分中,去掉一个最高分和一个最低分,剩下 i−2个评委的平均分,保留 2 位小数。
输入格式
第一行输入一个整数 n,表示评委人数。
第二行输出 n 个整数,表示各个评委的打分。
输出格式
输出共 n−2行,每行表示对应的答案。
代码
#include<stdio.h>
#include<iostream>
using namespace std;
int n, a[1020000];
double ans;
int maxx, minn;
int main() {
scanf("%d", &n);
for (int i = 1; i <= n; i++) {
scanf("%d", &a[i]);
}
maxx = a[1], minn = a[1];
for (int i = 1; i <= n; i++) {
ans += 1.0*a[i];
maxx = max(a[i], maxx);
minn = min(a[i], minn);
if (i >= 3)
printf("%.2lf\n", (ans - maxx - minn) / (i - 2));
}
return 0;
}
P9240 [蓝桥杯 2023 省 B] 冶炼金属
题目描述
小蓝有一个神奇的炉子用于将普通金属 O 冶炼成为一种特殊金属 X。这个炉子有一个称作转换率的属性 V,V 是一个正整数,这意味着消耗 V 个普通金属 O 恰好可以冶炼出一个特殊金属 X,当普通金属 O 的数目不足 V 时,无法继续冶炼。
现在给出了 N 条冶炼记录,每条记录中包含两个整数 A 和 B,这表示本次投入了 A 个普通金属 O,最终冶炼出了 B 个特殊金属 X。每条记录都是独立的,这意味着上一次没消耗完的普通金属 O 不会累加到下一次的冶炼当中。
根据这 N 条冶炼记录,请你推测出转换率 V 的最小值和最大值分别可能是多少,题目保证评测数据不存在无解的情况。
输入格式
第一行一个整数 N,表示冶炼记录的数目。
接下来输入 N 行,每行两个整数 A,B,含义如题目所述。
输出格式
输出两个整数,分别表示 V 可能的最小值和最大值,中间用空格分开。
代码
#include<stdio.h>
long long int maxx=999999999, minn=-1,a,b;
int n;
int max(int x, int y) {
return x > y ? x : y;
}
int min(int x, int y) {
return x < y ? x : y;
}
int main() {
scanf("%d", &n);
for (int i = 1; i <= n; i++)
{
scanf("%d%d", &a, &b);
minn = max(minn, int(double(a * 1.0 / (b + 1))) + 1);
maxx = min(maxx, int(double(a * 1.0 / b)));
}
printf("%d %d", minn, maxx);
return 0;
}
P1012 [NOIP1998 提高组] 拼数
题目描述
设有 n 个正整数 a1…an,将它们联接成一排,相邻数字首尾相接,组成一个最大的整数。
输入格式
第一行有一个整数,表示数字个数 n。
第二行有 n 个整数,表示给出的 n 个整数 ai。
输出格式
一个正整数,表示最大的整数
代码
#include<stdio.h>
#include<string.h>
#include<iostream>
#include<algorithm>
using namespace std;
int n;
string a[30];
bool cmp(const string& a, const string& b) {
return (a + b > b + a);
}
int main() {
scanf("%d", &n);
getchar();
for (int i = 1; i <= n; i++) {
cin >> a[i];
}
sort(a + 1, a + n + 1, cmp);
for (int i = 1; i <= n; i++) {
cout << a[i];
}
return 0;
}