【15NOIP普及组】金币:
题目描述:
国王将金币作为工资,发放给忠诚的骑士。第一天,骑士收到一枚金币;之后两天(第二天和第三天),每天收到两枚金币;之后三天(第四、五、六天),每天收到三枚金币;之后四天(第七、八、九、十天),每天收到四枚金币……;这种工资发放模式会一直这样延续下去:当连续N天每天收到N枚金币后,骑士会在之后的连续N+1天里,每天收到N+1枚金币。
请计算在前K天里,骑士一共获得了多少金币。
输入
只有1行,包含一个正整数K,表示发放金币的天数。
输出
只有1行,包含一个正整数,即骑士收到的金币数。
输入样例
6
输出样例
14
AC代码
#include<bits/stdc++.h>
using namespace std;
int main()
{
int cnt=0,n,t=0;
cin>>n;
for(int i=1;i<=n;i++){
for(int j=1;j<=i;j++){
cnt+=i;
t++;
if(t==n){
cout<<cnt<<endl;
return 0;
}
}
}
return 0;
}
【16NOIP普及组】买铅笔:
题目描述
P老师需要去商店买n支铅笔作为小朋友们参加NOIP的礼物。她发现商店一共有3种包装的铅笔,不同包装内的铅笔数量有可能不同,价格也有可能不同。为了公平起见,P老师决定只买同一种包装的铅笔。商店不允许将铅笔的包装拆开,因此P老师可能需要购买超过n支铅笔才够给小朋友们发礼物。现在P老师想知道,在商店每种包装的数量都足够的情况下,要买够至少n支铅笔最少需要花费多少钱。
输入
输入的第一行包含一个正整数n,表示需要的铅笔数量。
接下来三行,每行用两个正整数描述一种包装的铅笔:其中第一个整数表示这种包装内铅笔的数量,第二个整数表示这种包装的价格。
保证所有的7个数都是不超过10000的正整数。
输出
输出一行一个整数,表示P老师最少需要花费的钱。
输入样例
57
2 2
50 30
30 27
输出样例
54
AC代码
#include <stdio.h>
#include <math.h>
int main()
{
int n;
int x, y;
double p, min;
scanf("%d", &n);
for (int i = 0; i < 3; ++i)
{
scanf("%d %d", &x, &y);
p = ceil((n*1.0 / x)) * y;
if (i == 0)
{
min = p;
}
if (p < min)
{
min = p;
}
}
printf("%.0lf\n",min);
return 0;
}
摘自
的客博
【17NOIP普及组】成绩:
题目描述
牛牛最近学习了 C++入门课程,这门课程的总成绩计算方法是:
总成绩 = 作业成绩 × 20% + 小测成绩 × 30% + 期末考试成绩 × 50%
牛牛想知道,这门课程自己最终能得到多少分。
输入
只有 1 行,包含三个非负整数A、B、C,分别表示牛牛的作业成绩、小测 成绩和期末考试成绩。相邻两个数之间用一个空格隔开,三项成绩满分都是 100 分。
输出
只有 1 行,包含一个整数,即牛牛这门课程的总成绩,满分也是 100 分。
输入样例
100 100 80
输出样例
90
AC代码
#include<iostream>
using namespace std;
int main()
{
int A, B, C;
cin >> A >> B >> C;
cout << A * 0.2 + B * 0.3 + C * 0.5;
return 0;
}
【18NOIP普及组】标题统计:
题目描述
凯凯刚写了一篇美妙的作文,请问这篇作文的标题中有多少个字符?
注意:标题中可能包含大、小写英文字母、数字字符、空格和换行符。统计标题字符数时,空格和换行符不计算在内。
输入
输入只有一行,一个字符串 s�。
输出
输出只有一行,包含一个整数,即作文标题的字符数(不含空格和换行符)。
输入样例
234
输出样例
3
AC代码
#include <bits/stdc++.h>
using namespace std;
int cnt;
int main()
{
string s;
getline(cin,s);
for(int i=0;i<s.size();i++){
if(s[i]==' '){
continue;
}
cnt++;
}
cout<<cnt;
return 0;
}
【19CSPJ普及组】数字游戏:
题目描述
小 K 同学向小 P 同学发送了一个长度为 8 的 01 字符串来玩数字游戏,小 P 同学想要知道字符串中究竟有多少个 1。
注意:01 字符串为每一个字符是 0 或者 1 的字符串,如“101”(不含双引号)为一个长度为 3 的 01 字符串。
输入
只有一行,一个长度为 8 的 01 字符串 s。
输出
只有一行,包含一个整数,即 01 字符串中字符 1 的个数。
输入样例
00010100
输出样例
2
AC代码
#include <bits/stdc++.h>
using namespace std;
int cnt;
int main()
{
string s;
cin>>s;
for(int i=0;i<s.size();i++){
if(s[i]=='1'){
cnt++;
}
}
cout<<cnt;
return 0;
}
【20CSPJ普及组】优秀的拆分:
题目描述
一般来说,一个正整数可以拆分成若干个正整数的和。
例如,1=11=1,10=1+2+3+410=1+2+3+4 等。对于正整数 n的一种特定拆分,我们称它为“优秀的”,当且仅当在这种拆分下,n 被分解为了若干个不同的 22 的正整数次幂。注意,一个数 x能被表示成 22 的正整数次幂,当且仅当 x 能通过正整数个 22 相乘在一起得到。
例如,10=8+2=23+2110=8+2=23+21是一个优秀的拆分。但是,7=4+2+1=22+21+207=4+2+1=22+21+20 就不是一个优秀的拆分,因为 11 不是 22 的正整数次幂。
现在,给定正整数 n,你需要判断这个数的所有拆分中,是否存在优秀的拆分。若存在,请你给出具体的拆分方案。
输入
输入只有一行,一个整数 nn,代表需要判断的数。
输出
如果这个数的所有拆分中,存在优秀的拆分。那么,你需要从大到小输出这个拆分中的每一个数,相邻两个数之间用一个空格隔开。可以证明,在规定了拆分数字的顺序后,该拆分方案是唯一的。
若不存在优秀的拆分,输出 -1
。
输入样例
6
输出样例
4 2
AC代码
#include <bits/stdc++.h>
using namespace std;
int n,a[30],j,k;
int main(){
cin>>n;
if(n%2==1)cout<<-1;
else{
for(int i=n;i!=0;i/=2){
j++;
a[j]=i%2;
}
k=j-1;
for(int i=j;i>=1;i--){
long long s=pow(2,k);
if(a[i]!=0)cout<<s<<" ";
k--;
}
}
return 0;
}
【21CSPJ普及组】分糖果(candy):
题目描述
红太阳幼儿园的小朋友们开始分糖果啦!
红太阳幼儿园有 n 个小朋友,你是其中之一。保证 n≥2≥2。
有一天你在幼儿园的后花园里发现无穷多颗糖果,你打算拿一些糖果回去分给幼儿园的小朋友们。
由于你只是个平平无奇的幼儿园小朋友,所以你的体力有限,至多只能拿 R 块糖回去。
但是拿的太少不够分的,所以你至少要拿 L 块糖回去。保证 n≤L≤R。
也就是说,如果你拿了 k 块糖,那么你需要保证 L≤k≤R。
如果你拿了 k 块糖,你将把这 k块糖放到篮子里,并要求大家按照如下方案分糖果:只要篮子里有不少于n块糖果,幼儿园的所有 n 个小朋友(包括你自己)都从篮子中拿走恰好一块糖,直到篮子里的糖数量少于
n块。此时篮子里剩余的糖果均归你所有——这些糖果是作为你 搬糖果的奖励。
作为幼儿园高质量小朋友,你希望让作为你搬糖果的奖励的糖果数量(而不是你最后获得的总糖果数量!)尽可能多;因此你需要写一个程序,依次输入 n, L, R,并输出
出你最多能获得多少作为你搬糖果的奖励的糖果数量。
输入
输入一行,包含三个正整数 n, L, R,分别表示小朋友的个数、糖果数量的下界和上界。
输出
输出一行一个整数,表示你最多能获得的作为你搬糖果的奖励的糖果数量。
输入样例
7 16 23
输出样例
6
AC代码
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n,l,r;
cin>>n>>l>>r;
if(l/n==r/n){
cout<<r%n;
}
else{
cout<<n-1;
}
return 0;
}
【22CSPJ普及组】乘方(pow):
【题目描述】
小文同学刚刚接触了信息学竞赛,有一天她遇到了这样一个题:给定正整数 a 和 b,求 ab 的值是多少。
a^b即 b个 a 相乘的值,例如 2^3 即为 3个 2 相乘,结果为 2×2×2=8。
“简单!”小文心想,同时很快就写出了一份程序,可是测试时却出现了错误。
小文很快意识到,她的程序里的变量都是 int 类型的。在大多数机器上,int 类型能表示的最大数为 231−1 ,因此只要计算结果超过这个数,她的程序就会出现错误。
由于小文刚刚学会编程,她担心使用 int 计算会出现问题。因此她希望你在 ab 的值超过 109 时,输出一个 ‐1 进行警示,否则就输出正确的 a^b的值。
然而小文还是不知道怎么实现这份程序,因此她想请你帮忙。
输入
输入共一行,两个正整数 a, b。
输出
输出共一行,如果 ab 的值不超过 109 ,则输出 a^b 的值,否则输出 ‐1 。
输入样例
10 9
输出样例
1000000000
AC代码
#include <bits/stdc++.h>
using namespace std;
long long a,b,sum=1;
int main()
{
scanf("%d%d",&a,&b);
for(int i=1;i<=b;i++)
{
sum=sum*a;
if(sum>1000000000)
{
printf("-1");
return 0;
}
}
printf("%d",sum);
return 0;
}