目录
7-2 生肖确定(模拟)
2023年是兔年,1年后(2024年)是龙年,1年前(2022年)是虎年。那么对于给定的一个整数n,请确定2023年之前(n为负数)或之后(n为正数)∣n∣年的结果年份及其对应的生肖(以英文单词表示,详见最后的提示)。
输入格式:
首先输入一个正整数T,表示测试数据的组数,然后是T组测试数据。每组测试输入1个整数n (−2023<n≤10000,n≠0)。
输出格式:
对于每组测试,在一行上输出结果年份及其对应的生肖,之间以一个空格间隔。
输入样例:
3
-1
1
2
输出样例:
2022 tiger
2024 dragon
2025 snake
提示:
鼠、牛、虎、兔、龙、蛇、马、羊、猴、鸡、狗、猪等十二生肖相应的英文单词如下:
rat、ox、tiger、rabbit、dragon、snake、horse、goat、monkey、rooster、dog、pig
思路:简单模拟题,定义一个字符串数组把十二生肖对应的英文单词分别记录进去,随后依据题意进行模拟即可
AC代码:
#include <bits/stdc++.h>
using namespace std;
vector<string> item = {"rat", "ox", "tiger", "rabbit", "dragon", "snake", "horse", "goat", "monkey", "rooster", "dog", "pig"};
void solve() {
int i, j, k, n, index = 3;
cin >> n;
int ans = 2023 + n;
if (n < 0) {
while (n++) {
index--;
if (index == -1) index = 11;
}
} else {
while (n--) {
index++;
if (index == 12) index = 0;
}
}
cout << ans << " " << item[index] << endl;
}
int main()
{
int t;
cin >> t;
while (t--) {
solve();
}
system("pause");
return 0;
}
7-3 韩信点兵(模拟)
在中国数学史上,广泛流传着一个“韩信点兵”的故事:韩信是汉高祖刘邦手下的大将,他英勇善战,智谋超群,为汉朝建立了卓越的功劳。据说韩信的数学水平也非常高超,他在点兵的时候,为了知道有多少兵,同时又能保住军事机密,便让士兵排队报数:
- 按从1至5报数,记下最末一个士兵报的数为1;
- 再按从1至6报数,记下最末一个士兵报的数为5;
- 再按从1至7报数,记下最末一个士兵报的数为4;
- 最后按从1至11报数,最末一个士兵报的数为10;
请编写程序计算韩信至少有多少兵。
输入格式:
本题无输入
输出格式:
输出韩信至少拥有的士兵人数。
AC代码:
#include <bits/stdc++.h>
using namespace std;
int main()
{
int i, j, k, n;
n = 0;
while (++n) {
if (n % 5 == 1 && n % 6 == 5 && n % 7 == 4 && n % 11 == 10) break;
}
cout << n << endl;
system("pause");
return 0;
}
7-4 程序员买包子(模拟)

这是一条检测真正程序员的段子:假如你被家人要求下班顺路买十只包子,如果看到卖西瓜的,买一只。那么你会在什么情况下只买一只包子回家?
本题要求你考虑这个段子的通用版:假如你被要求下班顺路买 N 只包子,如果看到卖 X 的,买 M 只。那么如果你最后买了 K 只包子回家,说明你看到卖 X 的没有呢?
输入格式:
输入在一行中顺序给出题面中的 N、X、M、K,以空格分隔。其中 N、M 和 K 为不超过 1000 的正整数,X 是一个长度不超过 10 的、仅由小写英文字母组成的字符串。题目保证 N≠M。
输出格式:
在一行中输出结论,格式为:
- 如果 K=N,输出
mei you mai X de; - 如果 K=M,输出
kan dao le mai X de; - 否则输出
wang le zhao mai X de.
其中X是输入中给定的字符串 X。
输入样例1:
10 xigua 1 10
输出样例1:
mei you mai xigua de
输入样例2:
10 huanggua 1 1
输出样例2:
kan dao le mai huanggua de
输入样例3:
10 shagua 1 250
输出样例3:
wang le zhao mai shagua de
AC代码:
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n, m, k;
string x;
cin >> n >> x >> m >> k;
if (k == n) cout << "mei you mai " << x << " de" << endl;
else if (k == m) cout << "kan dao le mai " << x << " de" << endl;
else cout << "wang le zhao mai " << x << " de" << endl;
system("pause");
return 0;
}
7-5 h0078. 蛇形矩阵变形
现在给你一个n*n的初始全零的矩阵,请你将其按以下方法填数:

但是这样子太过简单,所以每一次操作会选择一个子矩阵,请你在其子矩阵上进行填数,并在最后输出整个矩阵
输入格式:
第一行两个整数n,m,表示矩阵的大小和操作次数(n≤2000,m≤3000)接下来m行,每行输入三个正整数x,y,k,表示在以(x,y)为左上角,边长为k的方阵内填数(1≤x,y≤n,max(x+k−1,y+k−1)≤n)
输出格式:
输出一个n*n的矩阵,每个整数占5个字节。
输入样例:
3 2
1 1 3
2 2 2
输出样例:
1 2 3
6 1 2
7 4 3
思路:按题意进行模拟即可,在进行行数变换的时候可以定义一个bool类型的变量,可以用来区分此行是正方向还是负方向
AC代码:
#include <bits/stdc++.h>
using namespace std;
const int maxn = (int)2e3 + 10;
vector<vector<int>>nums(maxn, vector<int>(maxn, 0));
int n, m;
void solve() {
int i, j, k, x, y;
int item = 1;
bool flag = true;
cin >> x >> y >> k;
x--, y--;
for (i = x; i < x + k; i++) {
if (flag)
for (j = y; j < y + k; j++) nums[i][j] = item++;
else
for (j = y + k - 1; j >= y; j--) nums[i][j] = item++;
flag = !flag;
}
}
int main()
{
int i, j, k;
cin >> n >> m;
while (m--) {

该博客汇总了多道算法题,包括生肖确定、韩信点兵、程序员买包子等。题目类型涉及模拟、思维、并查集、dfs等。博客给出了各题的输入输出格式、思路分析及AC代码,还对部分题的易错点和优化方法进行了说明。
最低0.47元/天 解锁文章
3299

被折叠的 条评论
为什么被折叠?



