题解:P11229 [CSP-J 2024] 小木棍(民间数据)

· · 题解

思路: 我是先打了个表,然后推出了可以将题意理解为将每个 n 取余七,再特判每一种情况,具体如表(计 n \mod 7m):

m ans
1 10 后面 \frac{(n-8)}{7}8
2 1 后面 \frac{(n-2)}{7}8
3 200 后面 \frac{(n-17)}{7}8
4 20 后面 \frac{(n-11)}{7}8
5 2 后面 \frac{(n-5)}{7}8
6 6 后面 \frac{(n-6)}{7}8
0 \frac{n}{7}8

代码就很好写了(记得特判!):

#include<bits/stdc++.h>
using namespace std;
int T;
int main(){
    cin>>T;
    while(T--){
        int n;
        cin>>n;
        if(n==1){
            cout<<"-1\n";
            continue;
        }
        if(n==2){
            cout<<"1\n";
            continue;
        }
        if(n==3){
            cout<<"7\n";
            continue;
        }
        if(n==4){
            cout<<"4\n";
            continue;
        }
        if(n==5){
            cout<<"2\n";
            continue;
        }
        if(n==10){
            cout<<"22\n";
            continue;
        }
        int k=n%7;
        switch(k){
            case 0:{
                for(int i=1;i<=n/7;i++)
                    cout<<8;
                break;
            }
            case 1:{
                cout<<10;
                for(int i=1;i<=(n-8)/7;i++)
                    cout<<8;
                break;
            }
            case 2:{
                cout<<1;
                for(int i=1;i<=(n-2)/7;i++)
                    cout<<8;
                break;
            }
            case 3:{
                cout<<200;
                for(int i=1;i<=(n-17)/7;i++)
                    cout<<8;
                break;
            }
            case 4:{
                cout<<20;
                for(int i=1;i<=(n-11)/7;i++)
                    cout<<8;
                break;
            }
            case 5:{
                cout<<2;
                for(int i=1;i<=(n-5)/7;i++)
                    cout<<8;
                break;
            }
            case 6:{
                cout<<6;
                for(int i=1;i<=(n-6)/7;i++)
                    cout<<8;
                break;
            }
        }
        cout<<"\n";
    }
    return 0;
}

拜拜!祝大家和我一等!