目录
HDU1056——HangOver
题目描述
运行代码
代码思路
HDU1057——A New Growth Industry
题目描述
运行代码
代码思路
HDU1058——Humble Numbers
题目描述
运行代码
代码思路
HDU1056——HangOver
题目描述
Problem - 1056
运行代码
#include <iostream>
int main() {double c;while (std::cin >> c && c != 0.00) {double sum = 0.0;int n = 1;while (sum < c) {sum += 1.0 / (n + 1);n++;}std::cout << n-1 << " card(s)" << std::endl;}return 0;
}
代码思路
-
首先定义了一个双精度浮点数
c
用于接收输入的测试用例数据。 -
进入一个
while
循环,只要能成功读取c
的值并且c
不等于0.00
,就执行循环体内的操作。 -
在循环体内,初始化一个累加变量
sum
为0.0
,并将表示卡片数量的计数器n
初始化为1
。 -
然后进入一个内层的
while
循环,只要当前的累加和sum
小于输入的目标伸出量c
,就继续执行以下操作:- 将
1.0 / (n + 1)
累加到sum
中,表示增加当前这张卡片能带来的伸出量贡献。 - 增加
n
的值,准备计算下一张卡片的贡献。
- 将
-
当内层循环结束时,此时的
n
比达到至少c
伸出量所需的卡片数量多1
,所以在输出时输出n - 1
,并按照指定格式输出结果,表示达到至少c
伸出量所需的最少卡片数量。
HDU1057——A New Growth Industry
题目描述
Problem - 1057
运行代码
#include <iostream>
#include <cstring>
#include<stdio.h>
#include<math.h>
#include<algorithm>
using namespace std;
const int ROW = 20;
const int COL = 20;
int main() {int T;cin >> T;while (T--) {int n;cin >> n;int D[16];for (int k = 0; k < 16; k++) {cin >> D[k];}int a[ROW][COL];for (int r = 0; r < ROW; r++) {for (int c = 0; c < COL; c++) {cin >> a[r][c];}}for (int j = 0; j < n; j++) {int tmp[ROW][COL];for (int r = 0; r < ROW; r++) {for (int c = 0; c < COL; c++) {int sum = 0;if (r > 0) sum += a[r - 1][c];if (r < ROW - 1) sum += a[r + 1][c];if (c > 0) sum += a[r][c - 1];if (c < COL - 1) sum += a[r][c + 1];sum += a[r][c];tmp[r][c] = max(0, min(a[r][c] + D[sum], 3));}}for (int r = 0; r < ROW; r++) {for (int c = 0; c < COL; c++) {a[r][c] = tmp[r][c];}}}char ans[4] = { '.', '!', 'X', '#' };for (int r = 0; r < ROW; r++) {for (int c = 0; c < COL; c++) {cout << ans[a[r][c]];}cout << endl;}if (T) {cout << endl;}}return 0;
}
代码思路
-
首先,定义了一些常量和变量:
ROW
和COL
分别表示培养皿的行数和列数。T
表示测试用例的数量。n
表示要模拟的天数。D
数组用于存储 DNA 规则。a
二维数组表示培养皿中每个位置的初始种群密度。tmp
二维数组用于临时存储模拟一天后的种群密度变化。
-
然后,通过一个循环读取
T
个测试用例。 -
对于每个测试用例:
- 读取模拟的天数
n
和 DNA 规则D
。 - 读取培养皿的初始种群密度值到
a
数组中。 - 进行
n
次模拟:- 对于培养皿中的每个位置
(r, c)
,计算其相邻位置(上、下、左、右)和自身的种群密度总和sum
。 - 根据
sum
从D
数组中获取变化值,并计算新的种群密度值存储在tmp
数组中,同时确保新的密度值在 0 到 3 之间。 - 将
tmp
数组的值更新回a
数组。
- 对于培养皿中的每个位置
- 读取模拟的天数
-
最后,将最终的种群密度结果以特定的字符形式(
'.'
、'!'
、'X'
、'#'
)输出到控制台,每行代表培养皿的一行。如果不是最后一个测试用例,输出一个额外的换行符。
HDU1058——Humble Numbers
题目描述
Problem - 1058
运行代码
#include<cstdio>
#include<algorithm>
#include<cstring>
#define LL long long
using namespace std;
int n;
LL ans[5900];
LL mincmp(LL a, LL b, LL c, LL d)
{return min(a, min(b, min(c, d)));
}
int main()
{ans[1] = 1;int x1 = 1, x2 = 1, x3 = 1, x4 = 1;for (int i = 2; i <= 5842; i++){ans[i] = mincmp(ans[x1] * 2, ans[x2] * 3, ans[x3] * 5, ans[x4] * 7);if (ans[i] == ans[x1] * 2) x1++;if (ans[i] == ans[x2] * 3) x2++;if (ans[i] == ans[x3] * 5) x3++;if (ans[i] == ans[x4] * 7) x4++;}while (scanf("%d", &n), n){if (n % 100 >= 11 && n % 100 <= 19)printf("The %dth humble number is %lld.\n", n, ans[n]);else if (n % 10 == 1)printf("The %dst humble number is %lld.\n", n, ans[n]);else if (n % 10 == 2)printf("The %dnd humble number is %lld.\n", n, ans[n]);else if (n % 10 == 3)printf("The %drd humble number is %lld.\n", n, ans[n]);elseprintf("The %dth humble number is %lld.\n", n, ans[n]);}return 0;
}
代码思路
-
定义了一些变量和函数:
n
用于存储输入的数字。ans
数组用于存储计算得到的谦逊数。mincmp
函数用于找出四个数中的最小值。
-
在
main
函数中:- 首先初始化
ans[1]
为 1 ,并设置四个指针x1
、x2
、x3
、x4
都为 1 。 - 通过一个循环从 2 到 5842 计算每个位置的谦逊数。对于每个位置
i
,通过mincmp
函数找出四个可能的数(分别由之前的谦逊数乘以 2、3、5、7 得到)中的最小值作为当前位置的谦逊数ans[i]
。然后根据当前最小值的来源更新相应的指针。 - 接着通过一个循环读取输入的数字
n
,只要n
不为 0 :- 根据
n
的末两位数和末位数来判断应该使用的序数后缀("st"、"nd"、"rd" 或 "th")。 - 然后输出相应的结果,包括谦逊数的位置和对应的谦逊数值。
- 根据
- 首先初始化