A 起床时间
- 知识点:顺序结构,基本运算符使用,\、%
思路:转换成统一的时间单位计算
参考代码#include<bits/stdc++.h> using namespace std; int main() { int h,m,x; cin>>h>>m>>x; int r=h*60+m-x; cout<<r/60<<" "<<r%60; return 0; }
B i 的 i次方
知识点:简单循环嵌套
思路:外层循环求和,内层循环求积,累积器需要每次初始化为1;数据类型超出了int范围,使用long long
参考代码#include<bits/stdc++.h> using namespace std; int main() { long long n,sum=0,ji=1; cin>>n; for(int i=1;i<=n;i++){ ji=1; for(int j=1;j<=i;j++){ ji*=i; } sum+=ji; } cout<<sum; return 0; }
C 单词排序
知识点:字符串、结构体排序
思路
每个字符出现的次数放进桶里;
每个字符及出现的次数存进结构体;
自定义结构体排序规则,先比较字符次数不同的从高到低,字符相同的比较字典序
参考代码#include<bits/stdc++.h> using namespace std; int a[255];//桶 struct node{ char c; int cnt; }; node nd[255]; //自定义结构体排序 bool cmp(node nd1,node nd2){ if(nd1.cnt!=nd2.cnt){ return nd1.cnt>nd2.cnt; } return nd1.c<nd2.c; } int main() { string s; getline(cin,s); int len=s.size(); //放进桶里 for(int i=0;i<len;i++){ if(s[i]!=' '){ a[s[i]]++; } } //放进结构体数组、逆序输出 int pos=0; for(int i=0;i<=255;i++){ if(a[i]!=0){ ++pos; nd[pos].c=(char)i; nd[pos].cnt=a[i]; } } sort(nd+1,nd+1+pos,cmp);//结构体排序 for(int i=1;i<=pos;i++){ cout<<nd[i].c; } return 0; }
D 偶数位的数
知识点:复杂循环嵌套,分离数位
思路:外层循环枚举数的范围;内层循环分离数位,计算每个数的位数,判断偶数;
注意点:内层循环不能直接使用外层循环变量i做除法,否则会导致死循环;内层循环使用的计数器要初始化
参考代码#include<bits/stdc++.h> using namespace std; int main() { int l,r,ans=0; cin>>l>>r; for(int i=l;i<=r;i++){ int num=i,cnt=0; while(num>0){ cnt++; num/=10; } if(cnt%2==0){ ans++; } } cout<<ans; return 0; }