- 闫晟淏 的博客
2025年2月6日 思维训练 day3
- @ 2025-2-6 17:29:55
错题:
章节三T1
错因:
未考虑到特殊情况。
思路:
创建4个变量,一个记录好的蜡烛数,一个记录烧过的蜡烛数,一个记录总数,最后一个可以组装成一个的蜡烛数。然后while循环到好的蜡烛数为0结束,sum每次加a,a加烧完的蜡烛数,烧完的改为好的蜡烛数取模可以组装成一个的蜡烛数,最后好的蜡烛数整除可以组装成一个的蜡烛数。最后输出总数即可。
参考代码:
#include<bits/stdc++.h>
using namespace std;
int main(){
int a,b,sum=0,c=0;
cin>>a>>b;
while(a){
sum+=a;
a+=c;
c=a%b;
a/=b;
}
cout<<sum<<endl;
return 0;
}
章节三T2
错因:
未考虑到特殊情况。
思路:
判断单程票是否比特殊票划算, 然后判断特殊票能成的天数能否整除 其要乘地铁的的总天数, 不然看剩余的是单程票划算还是特殊的划算, 按期计算方式输出总票数。
参考代码
#include<bits/stdc++.h>
using namespace std;
int main(){
int n,m,a,b;
cin>>n>>m>>a>>b;
if(a*m<=b){
cout<<n*a<<endl;
}else if(n%m==0){
cout<<n/m*b;
}else if(n%m*a>b){
cout<<(n/m+1)*b<<endl;
}else{
cout<<n%m*a+n/m*b<<endl;
}
return 0;
}
章节三T3
错因:
删除栈顶元素时 未考虑栈是否为空。
思路:
一旦输入是Q,就在判定压入元素,一旦输入是A判定栈是否为空,如果不为空就删除栈顶元素, 最后如果 栈是空就输出yes,栈不为空就输出no。
参考代码
#include<bits/stdc++.h>
using namespace std;
int main(){
int t;
char c;
cin>>t;
for(int e=0;e<t;e++){
stack<char> a;
int n;
cin>>n;
for(int i=0;i<n;i++){
cin>>c;
if(c=='Q'){
a.push('c');
}else if(c=='A'&&!a.empty()){
a.pop();
}
}
if(a.empty()) cout<<"Yes"<<endl;
else cout<<"No"<<endl;
}
return 0;
}
章节三T6
错因:
变量过大,超过了字符串。
思路:
出入字符串,判断是不是其子序列(判断时问号忽略,直接判对)一旦输入的第二个字符串结束直接判对,后面的如果是?即输出任意字母(如a,b,c,d,e,f,g,h......),如果第一个字符串输出结束,但第二个字符串尚未结束,那么输出no,结束。
参考代码
#include<bits/stdc++.h>
using namespace std;
int main(){
int p,cnt;
cin>>p;
string s,t;
for(int e=0;e<p;e++){
cnt=0;
cin>>s>>t;
for(int i=0;i<s.size();i++){
if(s[i]==t[cnt]){
cnt=cnt+1;
}else if(s[i]=='?'){
s[i]=t[cnt];
cnt=cnt+1;
}
if(cnt==t.size()) break;
}
if(cnt==t.size()){
cout<<"YES"<<endl;
for(int j=0;j<s.size();j++){
if(s[j]!='?') cout<<s[j];
else cout<<'a';
}
cout<<endl;
}else{
cout<<"NO"<<endl;
}
}
return 0;
}
THE END