习题集链接:https://ac.nowcoder.com/acm/contest/19304
能一行解决的我不太会用两行(除非特别绕),题解也是如此
点不到还是不负责()
低情商:懒狗作者
高情商:给读者独立思考空间,达到授人以渔的效果(确信)
第一天写完后几天就能二倍速听回放,大概
A
if/else
B
同A,switchcase也行
C
同A,有个坑是两感叹号不一样
D
同A,%
E
你甚至可以把D的代码复制过来稍微改改。爆int了记得用long long
F
(a>=4 && !(a%2))
G
cout<<(n%2?n:-1);
H
cout<<((n-a-b)>=0 && !((n-a-b)%2) ? "YES" : "NO");
左右横跳可以把多出来的偶数步消耗完
I
(a>50 && !(a%2))
J
(!(a%4) && a%100 || !(a%400))
K
cnt[a>0]++;//不用if,出题人看了可高兴了()
L
(a[0]+a[1]+a[2])/3<60?
M
cout<<"The maximum number is : "<<max({a,b,c})<<endl<<"The minimum number is : " <<min({a,b,c});
我昨天才知道maxmin可以传数组,就像前天才知道C++库函数里有maxmin
N
六种可能,体力活
cout<<max({a+b+c,a*b*c,a+b*c,a*b+c,(a+b)*c,a*(b+c)});
(题外话:这题改成多个数怎么解?想过1找相邻较小的加,然而能被一长串1干掉,2^3<3^2(幂,不是按位异或),晕)
O
这题我觉得switchcase好看些
switch(n%100){ case 3: case 4: case 5: cout<<"spring"; break; case 6: case 7: case 8: cout<<"summer"; break; case 9: case 10: case 11: cout<<"autumn"; break; default: cout<<"winter"; }
P
没整出来花活,ifelse,m不是10不用判d
Q
用数组存每月天数,要考虑闰年和两次借位,贴个完整代码
#include<bits/stdc++.h> using namespace std; //然而全是c int main() { int month[12]={31,28,31,30,31,30,31,31,30,31,30,31},y,m,d; scanf("%d-%d-%d",&y,&m,&d); if(!(y%4) && y%100 || !(y%400))month[1]++; d-=2; if(d<=0){ m--; if(!m){ m=12; y--; } d+=month[m-1]; } printf("%d-%02d-%02d",y,m,d); return 0; }
R
判断n能否被5整除,能说明结果是整数
S
我连夜从顺序结构习题里翻出来1042
T
for(i=1;i<=n;i++){
if(i>a && i>=n-b){ cnt++; } }
U
正常方法:ceil向上取整,floor向下取整
for(i=1;i<=3;i++){ cnt[i]=ceil(n*0.1*i)-floor(n*0.1*i); } cout<<cnt[1]<<' '<<(cnt[2]+=cnt[1])<<' '<<(cnt[3]+=cnt[2]);
找规律:判断有无小数部分
if(!(n%10)){ cout<<"0 0 0"; }else if(!(n%5)){ cout<<"1 1 2"; }else{ cout<<"1 2 3"; }
V
见到更大的就换,最后判断大于8
#include<bits/stdc++.h> using namespace std; int main() { int a,b,maxi,maxt=-1e9+7,i; for(i=0;i<7;i++){ cin>>a>>b; if((a+b)>maxt){ maxt=a+b; maxi=i+1; } } cout<<(maxt>8?maxi:0); return 0; }
W
有意思
思路是字符数组存码,算sum另取一个变量当下标跳过‘-’,判断正确要特判10,判断错误输出时字符串去掉最后一位,也要特判10(输出sum%11还是X,这里卡了我挺久)
完整代码如下
#include<bits/stdc++.h> using namespace std; int main() { char ch[233]={0}; int sum=0,i=0,j; while(~(ch[i]=getchar())){//可以用%s读,这里我改之前不止i++改完懒得换 i++; } ch[i]='\0'; for(i=0,j=0;i<9;i++,j++){ j=(ch[j]=='-')?j+1:j; sum+=(i+1)*(ch[j]-48); } if(sum%11==ch[12]-48 || sum%11==10 && ch[12]=='X'){ cout<<"Right"; }else{ ch[12]='\0'; printf("%s%c",ch,(sum%11==10?'X':sum%11+48)); } return 0; }