一,题目
1. 猪队友(pigmate.cpp)
【问题描述】 "不怕神一样的对手,就怕猪一样的队友",这不,小A需要将小B写的 n 张不同的明信片 放到一一对应的 n 个不同的信封中去,可是不管你信不信,他真的全部都装错了信封,真是一 个猪队友啊!请你编程帮小B求出 n 张明信片全部都装错的可能性有多少种。
【输入】 一个整数 n。
【输出】 输出一个整数,表示所有可能数。 说明:1<=n<=20。
【输入文件】 文件名:pigmate.in
【输出文件】 文件名:pigmate.out
【样例输入】 5
【样例输出】 44
2. 打靶(shoot.cpp)
【问题描述】 最近小A设计了一款射击机器人,使用激光进行打靶。这款机器人能在 n 次打靶中,取得 优秀的成绩。已知机器人在第 i 次打靶时,如果 i 为素数,那么机器人必能打中十环。请你设 计程序来计算,在 n 次打靶中,机器人至少能中多少个十环。
说明:1<n<=1000000
【输入文件】 文件名:shoot.in 共一行,输入一个数字 n。
【输出文件】 文件名:shoot.out 共一行,表示 n 次打靶中,打中十环的最少次数。
【样例输入 1】 100
【样例输出 1】 25
【样例输入 2】 2
【样例输出 2】 1
3. 玩骰子(dice.cpp)
【问题描述】 "我们来玩儿个游戏吧,小B!","好呀好呀!我正无聊呢",于是小A和小B一起玩儿起 了游戏。游戏规则是这样的:小A与小B各执一枚不同的骰子,初始状态如下图,骰子点数规 律都为:1 对 6,2 对 5,3 对 4。
小A和小B每轮转动筛子的次数和方向 如下展示。
小A:
第 i 轮 1 2 3 4 5 6 7 … 50
转动方向 右 下 左 右 下 左 右 … 右
转动次数 1 3 5 7 9 11 13 … 99
小B:
第 i 轮 1 2 3 4 5 6 7 … 50
转动方向 右 下 左 右 下 左 右 … 右
转动次数 2 4 6 8 10 12 14 … 100
在转动过程中,将每一次转动后,骰子上面的值记录并累加起来,直到 n 次之后,谁的总值大, 谁就赢。若总值一样大则为平局。 若小A胜利输出:"A",小B胜利输出:"B",平局输出:"P"。
小A的骰子 小B的骰子
【输入文件】 文件名:dice.in 一个整数 n,表示小A和小B要转动 n(0<=n<=50)轮骰子。
【输出文件】 文件名:dice.out 输出一个字符,表示比赛结果。
【样例输入】 5
【样例输出】 15 20 B
4. 三级包(bag.cpp)
【问题描述】 "我这里有物资!","注意观察四周!","救救我!"… 小童最近迷上了一款逃亡射击类游 戏,玩儿的不亦乐乎。游戏通过搜寻物资来增强装备和整体实力!不过小童善于思考,他将每 n 种物资的体积和价值统计了出来,并且根据三级包的容量 m 结合具体的算法,实现了背包物 资价值的最大化(每种物资只放一次)。请你也来编程实现吧! 说明:1<=n,m<=1000。
【输入格式】 文件名:bag.in 共 n+1 行。 第 1 行为两个整数,分别表示 m,n; 接下来有 n 行,表示 n 种物资的数据,每行包括两个 1 至 100 之间的整数,分别表示这 种物资的体积与价值。 【输出格式】 文件名:bag.out 一行,一个整数,表示三级包可装物资的最大价值。
【样例输入】
100
4 23
4 24 4
26 4
27 4
【样例输出】 16
二,答案
1.
#include<bits/stdc++.h>
using namespace std;
long long f(int m){
if(m == 1){
return 0;
}else{
return m * f(m - 1) + pow(-1,m);
}
}
int main(){
freopen("pigmate.in","r",stdin);
freopen("pigmate.out","w",stdout);
int n;
cin>>n;
cout<<f(n)<<endl;
return 0;
}
2.
#include<bits/stdc++.h>
using namespace std;
bool num(int a){
int j = 2;
while(j != a){
if(a % j == 0){
return false;
}
j++;
}
return true;
}
int main(){
freopen("shoot.in","r",stdin);
freopen("shoot.out","w",stdout);
int n,sum = 1;
cin>>n;
if(n < 3){
cout<<sum<<endl;
return 0;
}
for(int i = 3;i <= n;i++){
if(num(i) == true){
sum++;
}
}
cout<<sum<<endl;
return 0;
}
3.
#include<bits/stdc++.h>
using namespace std;
int TOP = 4,FRONT = 6,RIGHT = 5,sum = 0;
void turn(int C){
int t = TOP;
if(C == 1){//右
TOP = 7 - RIGHT;
RIGHT = t;
}else if(C == 0){//左
TOP = RIGHT;
RIGHT = 7 - t;
}else{//下
TOP = 7 - FRONT;
FRONT = t;
}
}
int main(){
freopen("dice.in","r",stdin);
freopen("dice.out","w",stdout);
int n,num = 1,sum1;
cin>>n;
for(int i = 1;i <= n;i++){
for(int j = 1;j <= num;j++){
turn(i % 3);
}
sum += TOP;
num += 2;
}
sum1 = sum;
cout<<sum<<" ";
TOP = 1,FRONT = 2,RIGHT = 3,sum = 0,num = 2;
for(int i = 1;i <= n;i++){
for(int j = 1;j <= num;j++){
turn(i % 3);
}
sum += TOP;
num += 2;
}
cout<<sum<<endl;
if(sum == sum1){
cout<<"P"<<endl;
}else if(sum < sum1){
cout<<"A"<<endl;
}else{
cout<<"B"<<endl;
}
return 0;
}
4.
#include<bits/stdc++.h>
using namespace std;
int n,m,w[1001],v[1001],dp[1001];
int main(){
freopen("bag.in","r",stdin);
freopen("bag.out","w",stdout);
cin>>m>>n;
for(int i = 1;i <= n;i++){
cin>>w[i]>>v[i];
}
for(int i = 1;i <= n;i++){
for(int j = m;j >= w[i];j--){
dp[j] = max(v[i] + dp[j - w[i]],dp[j]);
}
}
cout<<dp[m]<<endl;
return 0;
}