习题集链接: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;
}