1 、图书捐赠( books )
一年过去了,卡卡西又积攒了不少的零用钱,非常有爱心的卡卡西计划将这
些零用钱购买一些图书,送给贫困山区的小朋友,他来到新华书店,看到一本非
常适合小朋友学习编程的图书,定价为 25 元 / 本,如果购买数量超过 5 本,则购
买的所有图书价格降为 22 元 / 本;而如果从网上购买,定价为 24 元 / 本,如果购
买数量超过 10 本,则超过 10 本的部分 8 折优惠。卡卡西购买了 n 本该编程图书,
请你帮卡卡西计算下需要多少钱?
输入:输入数据一行,有两个用空格分隔的正整数 m , n ,其中 m=1 表示从新华
书店购买图书, m=2 表示从网上购买图书; n 表示总共购买图书的数量。
输出:一个数,表示购买图书需要花费的总金额,若 m=1 ,则输出为一个正整数,
若 m=2, 则输出的数值精确到小数点后 2 位。
样例 1 :
输入:( books.in )
1 6
输出:( books.out )
132
样例 2 :
输入:( books.in )
2 15
输出:( books.out )
336.00
青少年信息学奥林匹克竞赛
小学组试题
数据范围 :
1 ≤ n ≤ 100
#include<bits/stdc++.h>
using namespace std;
int main(){
int m, n;
double qian;
cin>>m>>n;
if(m==1){
  if(n<=5){
   qian=25*n;
  }else{
   qian=22*n;
  }
  cout<<qian<<endl;
}else if(m==2){
  if(n<=10){
   qian=24*n;
  }else{
   qian=240+(n-10)*24*0.8;
  }
  printf("%.2f\n", qian);
}
return 0;
}
2 、最少花费 (cost)
卡卡西购买了一批图书后,非常的高兴,爸爸妈妈也表扬了他,称赞他把零
用钱用到了最需要使用的地方,但卡卡西发现如果再购买一些文具送给贫困山区
的小朋友们就更好了。第二天,卡卡西发动自己的小伙伴拿出他们的零用钱去购
买文具,文具以套为单位,按包装销售,每个包装中有数量不等的文具,而且价
格也不一样,卡卡西和小伙伴们只想购买一种包装的文具,商店不允许他们将包
装拆开,因此卡卡西有可能需要购买超过 n 套文具才行,在商店每种包装的数量
都足够的情况下,要买够至少 n 套文具最少需要花费多少钱。
输入:输入数据共 m+1 行。第一行有两个用空格分隔的正整数 m , n , m 表示包
装的数量, n 表示需要购买的套数。接下来的 m 行,每行有两个用空格分
隔的正整数 s1, s2 ,分别表示每一种包装中文具的数量和整包的价格。
输出:一个正整数,表示买够至少 n 套文具的最少花费。
样例:
输入:( cost.in )
3 60
3 5
16 20
31 35
输出:( cost .out )
70
样例说明:共 3 种包装,需要购买 60 套,如果选择 3 套装,需购买 20 个,总价
格 20*5=100 ,如果选择 16 套装,需购买 4 个,总价格 4*20=80 ,如果选择 31
套装,需购买 2 个,总价格 2*35=70 。
数据范围 :
1 ≤ m ≤ 1000 1 ≤ n , s1 , s2 ≤ 10000
#include<bits/stdc++.h>
using namespace std;
int main(){
int ans=0x3f3f3f3f, qian;
int m, n;
int i, s1, s2;
cin>>m>>n;//包装数量  购买套数
for(i=1; i<=m; i++){
  cin>>s1>>s2;//数量、单价
   if(n%s1==0){
    qian=(n/s1)*s2;
   }else{
    qian=(n/s1+1)*s2;
   }
   ans=min(qian, ans);//找最小值
}
cout<<ans<<endl;
return 0;
}

3 、回文数和素数 (amount)
青少年信息学奥林匹克竞赛
小学组试题
卡卡西和小朋友们把购买的图书和文具一起邮寄给了山区的贫困孩子,他们
做了一件极其有意义的事情,心理乐开了花;哼着歌儿他们做起了数字游戏,他
们发现有些自然数例如 131 、 1221 等具有左右对称的特点,这样的数被称为回文
数;还有一些数如 13 、 17 等只能被 1 和其自身整除,这样的数被称为素数。作
为编程的爱好者,卡卡西想写出一个程序,迅速求出两个数 m 和 n 之间即是回
文数又是素数的个数。
输入:输入数据只有一行包含用空格分隔的两个正整数 m 和 n
输出:一个整数, m 和 n 之间(包含 m 和 n )即是回文数又是素数的个数。
样例 1 :
输入:( amount.in )
100 200
输出:( amount .out )
5
数据范围 :
100 ≤ m ≤ n ≤ 100000
#include<bits/stdc++.h>
using namespace std;
bool sushu(int n){
//大于等于2的素数判断
for(int i=2; i*i<=n; i++){
  if(n%i==0)
   return 0;
}
return 1;
}
bool huiwen(int m){
//回文数判断
int tmp=m, fan=0;
while(m!=0){//生成反转数
  fan=fan*10+m%10;
  m=m/10;
}
if(fan==tmp)
  return 1;
else
  return 0;
}
int main(){
int m, n;
int i, ans=0;
cin>>m>>n;
for(i=m; i<=n; i++){
  if( huiwen(i) && sushu(i) )
   ans++;
}
cout<<ans<<endl;
return 0;
}

4 、体验积分值 (point)
卡卡西和小朋友们做完了烧脑的数字游戏,决定放松一下,他们来到了万达
乐园,乐园中有很多的游玩项目,每玩一个项目就能获取一定的体验积分,不同
的项目产生不同的体验积分,假设乐园所有的游乐项目正好排成一排,并且游客
们不能游玩任意相邻的两个项目,那么卡卡西如何挑选游玩项目,使得这次万达
行他能获得最多的体验积分值呢。
输入: 输入共两行,第一行是一个正整数 n ,表示万达乐园的游乐项目数。第
二行是 n 个用空格隔开的正整数,分别表示每个游乐项目的体验积分值。
输出:只有一个正整数,为最多的体验积分值。
样例 1 :
输入:( point.in )
5
3 10 8 20 21
输出:( point .out )
32
样例说明:一共 5 个游玩项目,卡卡西选择第一个、第三个和第五个游玩,可共
青少年信息学奥林匹克竞赛
小学组试题
可获得 3+8+21=32 的体验积分值。
样例 2 :
输入:( point.in )
5
3 17 8 20 21
输出:( point .out )
38
样例说明:一共 5 个游玩项目,卡卡西选择第二个和第五个游玩,可共可获得
17+21=38 的体验积分值。
数据范围 :
5 ≤ n ≤ 1000 1 ≤每个游玩项目体验积分值≤ 500