目录
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")。
- 然后输出相应的结果,包括谦逊数的位置和对应的谦逊数值。
 
- 根据 
 
- 首先初始化