- 杜昊阳 的博客
寒假思维训练day4
- @ 2025-2-7 16:20:21
错题1章节四
错因:忘记把小时超过24要减写上了.
正确思路:先思考有多少特殊的情况比如说:小时数超过24,分钟数超过60这样,之后再一一排查计算.
参考代码:
#include<bits/stdc++.h>
using namespace std;
int main(){
string time;
int l,h,m;
cin>>time;
cin>>l;
h=(time[0]-48)*10+time[1]-48;
m=(time[3]-48)*10+time[4]-48;
if(l/60>=1){
h+=l/60;
}
m+=l%60;
if(m>=60){
m=m-60;
h++;
}
while(h>=24){
h-=24;
}
if(h<10){
cout<<0<<h<<":";
}else{
cout<<h<<":";
}
if(m<10){
cout<<0<<m;
}else{
cout<<m;
}
return 0;
}
错题2章节四
错因:没仔细看题目,把t>d写的是t>=d.
正确思路:先仔细看题目,审请出判断条件比如:文章中说的是橙子的大小必须不超过b,应为"<=".
参考代码:
#include<bits/stdc++.h>
using namespace std;
int main(){
int n,b,d,a,c=0,t=0;
cin>>n>>b>>d;
for(int i=0;i<n;i++){
int x;
cin>>x;
a=x;
if(a<=b){
t+=a;
if(t>d){
c++;
t=0;
}
}
}
cout<<c;
}
错题3章节四
正确思路:每遇到三个负数,就新开一个文件夹,将第三个负数放入其中,以此类推,即可得到答案.
参考代码:
#include<bits/stdc++.h>
using namespace std;
int main(){
int n,neg=0,len=1,s[105]={};
cin>>n;
for(int i=1;i<=n;i++){
int x;cin>>x;
if(x<0){
neg++;
}
if(neg==3){
len++;
neg=1;
}
s[len]++;
}
cout<<len<<endl;
for(int i=1;i<=len;i++){
cout<<s[i]<<" ";
}
return 0;
}
错题4章节四
正确思路:把每个数组中的数字遍历出来,之后通过一变量t来判断是否为"好数",是则c++.
参考代码:
#include<bits/stdc++.h>
using namespace std;
int a[101],st[10];
int main(){
int n,k,v,c=0,s=0,t;
cin>>n>>k;
for(int i=0;i<n;i++){
for(int j=0;j<10;j++){
st[j]=0;
}
for(int j=0;j<101;j++){
a[j]=0;
}
c=0;
cin>>v;
while(v){
a[c++]=v%10;
v/=10;
}
t=1;
for(int j=0;j<c;j++){
st[a[j]]=1;
}
for(int j=0;j<=k;j++){
if(!st[j]){
t=0;
}
}
if(t){
s++;
}
}
cout<<s;
return 0;
}
错题5章节四
错因:"YES"和"NO"没全部大写.
正确思路:与T028类似,此题无非是碰到和为0就需要分裂. 只有两种情况:和为0和和不为0.
参考代码:
#include<bits/stdc++.h>
using namespace std;
int main(){
int n,a[101],v=0;
cin>>n;
for(int i=0;i<n;i++){
cin>>a[i];
}
for(int i=0;i<n;i++){
v+=a[i];
}
if(v==0){
v=0;
for(int i=0;i<n;i++){
v+=a[i];
if(v!=0){
cout<<"YES"<<endl<<2<<endl<<1<<" "<<i+1<<endl<<i+2<<" "<<n;
return 0;
}
}
}else{
cout<<"YES"<<endl<<1<<endl<<1<<" "<<n;
return 0;
}
cout<<"NO";
return 0;
}