A : 游戏

问题描述

  有 n 个小朋友围成一圈玩游戏,小朋友从 1 至 n 编号,2 号小朋友坐在 1 号小朋友的顺时针方向,3 号小朋友坐在 2 号小朋友的顺时针方向,……,1 号小朋友坐在 n 号小朋友的顺时针方向。
  游戏开始,从 1 号小朋友开始顺时针报数,接下来每个小朋友的报数是上一个小朋友报的数加 1。若一个小朋友报的数为 k 的倍数或其末位数(即数的个位)为 k,则该小朋友被淘汰出局,不再参加以后的报数。当游戏中只剩下一个小朋友时,该小朋友获胜。
  例如,当 n=5, k=2 时:
  1 号小朋友报数 1;
  2 号小朋友报数 2 淘汰;
  3 号小朋友报数 3;
  4 号小朋友报数 4 淘汰;
  5 号小朋友报数 5;
  1 号小朋友报数 6 淘汰;
  3 号小朋友报数 7;
  5 号小朋友报数 8 淘汰;
  3 号小朋友获胜。

  给定 n 和 k,请问最后获胜的小朋友编号为多少?

输入格式

输入一行,包括两个整数 n 和 k,意义如题目所述。

输出格式

输出一行,包含一个整数,表示获胜的小朋友编号。

样例 1

输入

5 2

输出

3

样例 2

输入

7 3

输出

4

数据规模和约定

对于所有评测用例,1 ≤ n ≤ 1000,1 ≤ k ≤ 9。

解答

#include <iostream>using namespace std;int main()
{int n, k;cin >> n >> k;int a[n + 1];int O = 0;for (int i = 0; i <= n; i++){a[i] = 1;}int x = 1;int y = 1;while (O < n - 1){if (x > n){x = x - n;}if (a[x] != 0){a[x] = y;int d = y % 10;if (y % k == 0 || d == k){a[x] = 0;O++;}x++;y++;}else{x++;}}for (int i = 1; i < n + 1; i++){if (a[i] != 0){cout << i << endl;}}return 0;
}

B : 跳一跳

问题描述

 近来,跳一跳这款小游戏风靡全国,受到不少玩家的喜爱。
  简化后的跳一跳规则如下:玩家每次从当前方块跳到下一个方块,如果没有跳到下一个方块上则游戏结束。
  如果跳到了方块上,但没有跳到方块的中心则获得 1 分;跳到方块中心时,若上一次的得分为 1 分或这是本局游戏的第一次跳跃则此次得分为 2 分,否则此次得分比上一次得分多两分(即连续跳到方块中心时,总得分将 +2,+4,+6,+8...)。
  现在给出一个人跳一跳的全过程,请你求出他本局游戏的得分(按照题目描述的规则)。

输入格式

输入包含多个数字,用空格分隔,每个数字都是 1,2,0 之一,1 表示此次跳跃跳到了方块上但是没有跳到中心,2 表示此次跳跃跳到了方块上并且跳到了方块中心,0 表示此次跳跃没有跳到方块上(此时游戏结束)。

输出格式

输出一个整数,为本局游戏的得分(在本题的规则下)。

样例输入

1 1 2 2 2 1 1 2 2 0

样例输出

22

数据规模和约定

对于所有评测用例,输入的数字不超过 30 个,保证 0 正好出现一次且为最后一个数字。

解答

#include <iostream>using namespace std;int main()
{int n;cin >> n;int sum = 0;   // 记录得分int x = 0;     // 记录上一次跳跃的得分int y = 1;     // 跳跃的次数,进行判断是否第一次就跳到了中心while (n != 0) // 判断游戏是否结束{if (n == 1) // 没有跳到中心{x = 1;sum = sum + x;// x = 1;}else{if (y == 1 || x == 1) // 跳到中心{x = 2;sum = sum + x;}else{x = x + 2;sum = sum + x;}}cin >> n;y++;}cout << sum << endl;return 0;
}

C : 奇怪的电梯

问题描述

小 H 有一个奇怪的电梯,电梯可以根据需要停在每个楼层,每个楼层上都对应一个数字Ki​(0 <= Ki​ <= N),该电梯只有两个按钮:"UP"和"DOWN"。在第 i 层楼,如果按下"UP"按钮,电梯将移动到i+Ki​层;如果按下"DOWN",电梯将移动到i−Ki​层。当然,电梯有一个移动的范围,不能高于 N 且不能低于 1。例如,有一个 5 层楼的建筑物,k1​=3,k2​=3,k3​=1,k4​=2,k5​=5。从一楼开始,按"UP"按钮,将上升到四楼,如果按"DOWN"按钮,电梯将无法移动,因为它不能下降到-2 楼。
现在问题来了:小 H 想从 A 层移动到 B 层,他至少要按几次"UP"或"DOWN"按钮,你能帮帮他嘛?

输入格式

输入包含多个测试用例。每个测试用例包含两行。
第一行包含上述三个整数 N,A,B(1 <= N,A,B <= 200),第二行包含 N 个整数k1​,k2​,....kn​。
若读取到单个 0,则表示输入结束

输出格式

对于每个测试用例,输出一个整数表示最少按下"UP"或"DOWN"按钮的次数,若无法到达 B 层,请输出"-1"。每个测试用例的输出占一行。

样例输入

5 1 5
3 3 1 2 5
0

样例输出

3

数据规模和约定

1<=N,A,B<=200,0<=ki​<=N

提示

隐式图问题

解答

#include <bits/stdc++.h>using namespace std;int main()
{int sum = 0;   // 记录案例个数vector<int> g; // 记录案例个数的数组int n;while (cin >> n && n){int A, B;cin >> A >> B;vector<pair<int, int>> a(n + 1); // first 是楼层,second是标记int c[n + 1];                    // 记录步数for (int i = 0; i <= n; i++){// a[i] = 0;c[i] = 0;}for (int i = 0; i <= n; i++){a[i].first = i;a[i].second = 0;}int b[n + 1]; // 每层楼梯可以上升或下降的高度for (int i = 1; i <= n; i++){cin >> b[i];}queue<pair<int, int>> q;q.push(a[A]);a[A].second++;pair<int, int> x;while (!q.empty()){x = q.front();q.pop();int x1, x2;x1 = x.first - b[x.first]; // 下降的楼层数x2 = x.first + b[x.first]; // 上升的楼层数// 进行判断楼层是否被标记,未被标记就加入到队列中if (x1 >= 1 && a[x1].second == 0){q.push(a[x1]);a[x1].second++;c[x1] = c[x.first] + 1;}if (x2 <= n && a[x2].second == 0){q.push(a[x2]);a[x2].second++;c[x2] = c[x.first] + 1;}// 判断是否到达需要到达的楼层if (x.first == a[B].first){int u = c[B];g.push_back(u);sum++;break;}}// 判断是否无法到达需要到达的楼层if (x.first != a[B].first){g.push_back(-1);sum++;}// cout << c[B] << endl;}// 输出结果for (int i = 0; i < sum; i++){cout << g[i] << endl;}return 0;
}

D : 选数

问题描述

已知 n 个整数 x1​,x2​,…,xn​ 和 1 个整数 k(k<n)。从 n 个整数中任选 k 个整数相加,可分别得到一系列的和。例如当n=4,k=3,x1​=3,x2​=7,x3​=12,x4​=19时,可得全部的组合与它们的和为:

3+7+12=22 3+7+19=29 7+12+19=38
3+12+19=34

现在,要求你计算出和为素数共有多少种。

例如上例,只有一种的和为素数:3+7+19=29。

输入格式

输入包含两行
第一行两个数 n,k
第二行 n 个数依次表示xi​

输出格式

一个整数,表示合法的组合数

样例输入

4 3
3 7 12 19

样例输出

1

数据规模和约定

1<=k<n<=20
1<=xi​<=5000000

提示

素数的判定方法

bool prime(int n)
{if(n==1) return false;if (n==2) return true;for(int i=2;i*i<=n;i++)if (n%i==0) return false;return true;
}

解答

#include <bits/stdc++.h>using namespace std;
int cnt = 0;
int k;
int n;
vector<int> a;
bool prime(int n)
{if (n == 1)return false;if (n == 2)return true;for (int i = 2; i * i <= n; i++)if (n % i == 0)return false;return true;
}void dfs(int sum, int kk, int x)
{if (kk == (k + 1) && prime(sum)){cnt++;return;}if (x >= n || kk >= k + 1){return;}dfs(sum, kk, x + 1);dfs(sum + a[x], kk + 1, x + 1);
}
int main()
{// int n, k;cin >> n >> k;// int a[n];for (int i = 0; i < n; i++){int d;cin >> d;a.push_back(d);}dfs(0, 1, 0);cout << cnt << endl;return 0;
}

E : 棋盘问题

问题描述

小 H 收集到一些形状特殊的棋盘,她想在棋盘上面摆放棋子(棋子都是相同的)。她希望摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,你能帮她求解对于给定形状和大小的棋盘,摆放 k 个棋子的所有可行的摆放方案数 C 嘛?

输入格式

输入含有多组测试数据。
每组数据的第一行是两个正整数,n k,用一个空格隔开,表示了将在一个 n*n 的矩阵内描述棋盘,以及摆放棋子的数目。
当为-1 -1 时表示输入结束。
随后的 n 行描述了棋盘的形状:每行有 n 个字符,其中 # 表示棋盘区域, . 表示空白区域(数据保证不出现多余的空白行或者空白列)。
注意只有#棋盘区域可以摆放棋子。

输出格式

对于每一组数据,给出一行输出,输出摆放的方案数目 C (数据保证 C<2^31)

样例输入

2 1
#.
.#
4 4
...#
..#.
.#..
#...
-1 -1

样例输出

2
1

数据规模和约定

1<=k<=n<=8

解答

#include <bits/stdc++.h>using namespace std;
char a[10][10];
int n;
int k;
int cnt = 0;
int b[10];
void dfs(int kk, int x)
{if (kk > k){cnt++;return;}if (x > n){return;}for (int i = 1; i <= n; i++){if (!b[i] && a[x][i] == '#'){b[i] = 1;dfs(kk + 1, x + 1);b[i] = 0;}}dfs(kk, x + 1);
}int main()
{while (cin >> n >> k){if (n == -1 && k == -1){break;}for (int i = 1; i <= n; i++){for (int j = 1; j <= n; j++){cin >> a[i][j];}}for (int i = 0; i < 10; i++){b[i] = 0;}dfs(1, 1);cout << cnt << endl;cnt = 0;}return 0;
}

Vj程序设计作业H3相关推荐

  1. Vj程序设计作业H2

    A : 相邻数对 问题描述 给定 n 个不同的整数,问这些数中有多少对整数,它们的值正好相差 1. 输入格式 输入的第一行包含一个整数 n,表示给定整数的个数. 第二行包含所给定的 n 个整数. 输出 ...

  2. Vj程序设计作业H11

    A : 爬台阶 题目描述 楼上有 n 级台阶,其中有 m 级台阶是不安全的.yhf 一开始站在第 0 级台阶上,希望最终走到第 n 级台阶 yhf 跨一步满足以下约束: 只能向前走 不能落脚在不安全的 ...

  3. Vj程序设计作业H6

    A : 元音跳跃 问题描述 现在有一个长度为 n 的字符串,都有小写字母组成. 输出最长的连续元音的长度 输入格式 第一行一个整数 n , 0≤n≤106 接下来一行表示字符串 输出格式 输出一行,一 ...

  4. Vj程序设计作业H4

    B : 截绳子 题目描述 有 n 段绳子,长短不一.现在要从中截出 k 段长度相同的绳子.当然,一段绳子可以截出来多段绳子.截出来的绳子最长是多少? 输入格式 第一行两个整数 n 和 k (1≤n,k ...

  5. Vj程序设计作业H7

    A : 卖菜 问题描述 在一条街上有 n 个卖菜的商店,按 1 至 n 的顺序排成一排,这些商店都卖一种蔬菜. 第一天,每个商店都自己定了一个价格.店主们希望自己的菜价和其他商店的一致,第二天,每一家 ...

  6. Vj程序设计作业H10

    A : 小明上学 题目背景 小明是汉东省政法大学附属中学的一名学生,他每天都要骑自行车往返于家和学校.为了能尽可能充足地睡眠,他希望能够预计自己上学所需要的时间.他上学需要经过数段道路,相邻两段道路之 ...

  7. Vj程序设计作业H12

    A : 01背包 题目描述 有 N 件物品和一个容量为 V 的背包.第 i 件物品的重量是 w[i],价值是 c[i].求解将哪些物品装入背包可使这些物品的重量总和不超过背包容量,且价值总和最大. 输 ...

  8. Vj程序设计作业H8

    A : 元音回文 问题描述 现在有一个长度为 n 的字符串,都有小写字母组成. 现在所有元音字母都可以看作相同的字符 输出最长回文子串的长度 一个与自身的逆序相同的字符串即为回文串 比如 aba,aa ...

  9. 面向对象程序设计作业 6.1~6.4

    面向对象程序设计作业 6.1-6.4 面对对象基础题三道.继承多态一道. #include <iostream> #include <string> #include < ...

最新文章

  1. Linux 用户和用户组配置说明
  2. Excel 如何根据单元格中的值设立不同的颜色(或渐变)?(222)
  3. 05_数据的特征处理,归一化,标准化、缺失值处理,以及案例,使用场景,处理办法等
  4. javaweb利用servlet与struts2实现可点击刷新的基础图片验证码
  5. ruby hash方法_Ruby中带有示例的Hash.values方法
  6. python序列中是否包含某个元素
  7. ConvMixer:7行PyTorch代码实现的网络,就能在ImageNet上达到80%+的精度!
  8. STM32F103单片机RTC实时时钟的使用
  9. 21个演示展示强大的jQuery特效
  10. 使用Volley+OkHttp+Gson加速Android网络开发
  11. 【毕设教学】 经典单片机控制算法:PID - 嵌入式 物联网
  12. c语言最短线性路径算法,巧用Excel规划求解最短路径
  13. Get the information of all heroes in the League of Legends through the crawler.
  14. 模拟登录上海交大Jaccount
  15. jQuery便利多个相同的class,点击显示隐藏图标,显示及隐藏其下的内容
  16. 怎么把图片转PDF格式?转换方法分享
  17. Nexus搭建Maven私服并使用私服
  18. About Sealed
  19. Spring Boot 修改tomcat端口
  20. NeurIPS'22 | APG:面向CTR预估的自适应参数生成网络

热门文章

  1. Scrapy使用报错socket.timeout: timed out
  2. 论文笔记:使用基于Attention的卷积神经网络进行12导联的心电异常的多分类检测
  3. lintcode 1013. 独特的摩尔斯编码 set
  4. 人脸识别:Deep Face Recognition论文阅读
  5. 双因素方差分析全流程汇总
  6. 产出估值超百亿的“国民种草机”,这两个80后不简单
  7. java如何通过网络链接来下载文件到本地
  8. python钻石继承
  9. Codeforces - Masha and Cactus
  10. 多种相似度计算的python实现