一级:B3838 [GESP202306 一级] 时间规划
思路:
不需要单独处理小时和分钟的进位或借位问题。
直接将时刻统一为分钟单位,减少了错误的可能性。
代码:
#include<iostream>
using namespace std;
int main()
{
// 输入开始时刻和结束时刻
int sh,sm,eh,em;
cin>>sh>>sm>>eh>>em;
// 计算总分钟数
int stm=sh*60+sm;
int etm=eh*60+em;
// 计算两个时刻之间的分钟差
int mind=etm-stm;
// 输出分钟差
cout<<mind<<endl;
return 0;
}
二级:B4036 [GESP202409 二级] 数位之和
思路:
将输入的多个正整数存入数组或列表中,逐一检查每个数。
通过反复取余(num % 10)和整除(num /= 10),提取数字的每一位,并累加其和。
对位数之和进行取余判断(sum % 7 == 0)。
对于每个数字,输出其是否是美丽数字的判断结果。
代码:
#include<bits/stdc++.h>
using namespace std;
int n;
int main()
{
cin>>n;
int a[n];// 定义一个大小为 n 的数组,用于存储输入的数字
for(int i=0;i<n;i++)
{
cin>>a[i];
}
for(int i=0;i<n;i++)
{
int b=a[i];
int c=0;
while(b!=0)
{
c+=b%10;// 取当前数字的个位并加到总和
b/=10;// 去掉当前数字的个位
}
if(c%7==0) // 判断位数和是否是 7 的倍数
{
cout<<"Yes"<<endl;
}
else
{
cout<<"No"<<endl;
}
}
return 0;
}
三级:B3842 [GESP202306 三级] 春游
思路:
-
使用布尔数组
b[1005]
记录学生是否报到,b[v] = 1
表示编号 vvv 的学生已经报到。 -
初始化布尔数组为
false
,表示所有学生初始状态为未报到. -
输入 m 个学生编号,对于每个编号 v,将
b[v]
设置为true
。 -
遍历编号 [0,n−1],如果
b[i]==0
,说明编号 i 的学生未报到,输出编号。 -
如果所有学生都报到(即布尔数组中所有 [0,n−1] 均为
true
),需要输出 n。
代码:
#include<bits/stdc++.h>
using namespace std;
int n,m;//n(总数)和 m(已选择)
bool b[1005]={0},f=1;// 数组 b 用来标记已选择的元素,初始化为 0(未选择),f 用来标记是否找到缺失元素
int main()
{
cin>>n>>m;
for(int i=0;i<m;i++)
{
int v;
cin>>v;
b[v]=1; // 将数组中对应的位置标记为已选择
}
for(int i=0;i<n;i++)
{
if(b[i]==0)
{
cout<<i<<" ";
f=0;// 将 flag 设置为 0,表示找到了缺失元素
}
}
if(f)
{
cout<<n;
}
return 0;
}