持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第4天,点击查看活动详情
虽然是C++组的,但是和Java组的差不了两道题,大家都可以看一看 如有错误,还请佬 评论或私信指出(写的稍些急) 再也不肝博客了 /(ㄒoㄒ)/~~
(由于上传图片有限制,如果描述不清楚点击手写题解) 手写题解字丑,但是小编感觉会比文字看的直观一些(其实是不会用数学公式)
C++B组手写题解(如果访问出错,请刷新访问的页面即可(Nebo的问题))
当前页面的编程题均在C语言网成功运行 C语言网有各届蓝桥杯的题库 第十二届蓝桥杯编程题测试 刷题集
试题 F: 时间显示
时间限制: 1.0s
内存限制: 256.0MB
本题总分:15 分
【问题描述】
小蓝要和朋友合作开发一个时间显示的网站。在服务器上,朋友已经获取
了当前的时间,用一个整数表示,值为从 1970 年 1 月 1 日 00:00:00 到当前时
刻经过的毫秒数。
现在,小蓝要在客户端显示出这个时间。小蓝不用显示出年月日,只需要
显示出时分秒即可,毫秒也不用显示,直接舍去即可。
给定一个用整数表示的时间,请将这个时间对应的时分秒输出。
【输入格式】
输入一行包含一个整数,表示时间。
【输出格式】
输出时分秒表示的当前时间,格式形如 HH:MM:SS,其中 HH 表示时,值
为 0 到 23,MM 表示分,值为 0 到 59,SS 表示秒,值为 0 到 59。时、分、秒
不足两位时补前导 0。
【样例输入 1】
46800999
【样例输出 1】
13:00:00
【样例输入 2】
1618708103123
【样例输出 2】
01:08:23
【评测用例规模与约定】
对于所有评测用例,给定的时间为不超过 1018 的正整数。
package LanqiaobeiExam._12CB;
import java.util.Scanner;
/**
* ClassName: F时间显示
* Package: LanqiaobeiExam._12CB
*
* @DATE: 2022/3/21 20:18
* Author: asleep
*/
public class F时间显示 { //无需考虑天数,只要一天内的时间,直接取余算 时分秒 即可
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
long n = sc.nextLong();
n /= 1000;
long second = n % 60;
n /= 60;
long minute = n % 60;
n /= 60;
long hour = n % 24;
n /= 24;
if (hour < 10) {
System.out.print("0" + hour + ":");
} else {
System.out.print(hour + ":");
}
if(minute < 10) {
System.out.print("0" + minute + ":");
} else {
System.out.print(minute + ":");
}
if (second < 10) {
System.out.print("0" + second);
} else {
System.out.print(second);
}
}
}
试题 G: 砝码称重
时间限制: 1.0s
内存限制: 256.0MB
本题总分:20 分
【问题描述】
你有一架天平和 N 个砝码,这 N 个砝码重量依次是 W1, W2, · · · , WN。
请你计算一共可以称出多少种不同的重量?
注意砝码可以放在天平两边。
【输入格式】
输入的第一行包含一个整数 N。
第二行包含 N 个整数:W1, W2, W3, · · · , WN。
【输出格式】
输出一个整数代表答案。
【样例输入】
3
1 4 6
【样例输出】
10
【样例说明】
能称出的 10 种重量是:1、2、3、4、5、6、7、9、10、11。
1 = 1;
2 = 6 − 4 (天平一边放 6,另一边放 4);
3 = 4 − 1;
4 = 4;
5 = 6 − 1;
6 = 6;
7 = 1 + 6;
9 = 4 + 6 − 1;
10 = 4 + 6;
11 = 1 + 4 + 6。
【评测用例规模与约定】
对于 50% 的评测用例,1 ≤ N ≤ 15。
对于所有评测用例,1 ≤ N ≤ 100,N 个砝码总重不超过 100000。
package LanqiaobeiExam._12CB;
import java.util.Scanner;
/**
* ClassName: G砝码称重
* Package: LanqiaobeiExam._12CB
*
* @DATE: 2022/3/21 20:33
* Author: asleep
*/
public class G砝码称重 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int[] num = new int[n + 1];
int sum = 0;
for (int i = 1; i < n + 1; i++) {
num[i] = sc.nextInt();
sum += num[i];
}
boolean[][] dp = new boolean[101][100001];
dp[0][0] = true;
for (int i = 1; i < n + 1; i++) {
for (int j = 0; j < sum + 1; j++) {
dp[i][j] = dp[i - 1][j] || dp[i - 1][Math.abs(j - num[i])] || dp[i - 1][j + num[i]];
}
}
int res = 0;
for (int i = 1; i < sum + 1; i++) {
if (dp[n][i]) {
res++;
}
}
System.out.println(res);
}
}
#include "iostream"
#include "cmath"
using namespace std;
int num[101];
bool dp[101][100001]; //这里防止 j+num[i] 超过范围
int main() {
int n;
int sum = 0;
cin >> n;
for (int i = 1; i <= n; i++) {
cin >> num[i];
sum += num[i];
}
dp[0][0] = true;
for (int i = 1; i <= n; i++) {
for (int j = 0; j <= sum; j++) {
dp[i][j] = dp[i - 1][j] || dp[i - 1][(int)fabs(j - num[i])] || dp[i - 1][j + num[i]];
}
}
int res = 0;
for (int i = 1; i<= sum; i++) {
if (dp[n][i]) {
res++;
}
}
cout << res;
return 0;
}