NOIP1998普及组解题报告

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了NOIP1998普及组解题报告相关的知识,希望对你有一定的参考价值。

三连击

分析:模拟大水题。打表也行。注意输出顺序即可。

技术分享
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
const int maxn=10;
bool book[maxn];
int main(){
    for(int i=1;i<=9;++i){
        for(int j=1;j<=9;++j){
            for(int k=1;k<=9;++k){
                if(i!=j&&i!=k&&j!=k){
                    memset(book,0,sizeof(book));
                    book[i]=1;
                    book[j]=1;
                    book[k]=1;
                    int t=i*100+j*10+k;
                    int t1=t*2;
                    int t2=t*3;
                    int s=0;
                    while(t1>0){
                        book[t1%10]=1;
                        t1/=10;
                        ++s;
                    }
                    if(s>3)break;
                    s=0;
                    while(t2>0){
                        book[t2%10]=1;
                        t2/=10;
                        ++s;
                    }
                    if(s>3)break;
                    bool flag=1;
                    for(int i=1;i<=9;++i)if(book[i]==0)flag=0;
                    if(flag){
                        cout<<t<<" "<<t*2<<" "<<t*3<<endl;
                    }
                }
            }
        }
    }
    return 0;
}
View Code

阶乘之和

分析:高精度加法+高精度乘法(1个大数),模版体0 0

技术分享
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
const int maxn=1010;
int ans[maxn],len=0,t[maxn],l=0;
void sub(int s){
    for(int i=0;i<=l;++i){
        t[i]*=s;
    }
    for(int i=0;i<=l;++i){
        t[i+1]+=t[i]/10;
        t[i]%=10;
        if(i==l&&t[i+1]!=0)++l;
    }
}
void add(){
    for(int i=0;i<=max(l,len);++i){
        ans[i]+=t[i];
    }
    for(int i=0;i<=max(l,len);++i){
        ans[i+1]+=ans[i]/10;
        ans[i]%=10;
    }
    len=max(l,len);
    if(ans[max(l,len)+1]>0)len++;
}
int main(){
    int n;
    cin>>n;
    for(int i=1;i<=n;++i){
        memset(t,0,sizeof(t));
        t[0]=1;
        for(int j=1;j<=i;++j){
            sub(j);
        }
        add();
    }
    for(int i=len;i>=0;--i)cout<<ans[i];
    return 0;
}
View Code

幂次方

分析:计算机里的数就是二进制的,例如 7 =(B)111,模拟依次先处理最高位,得到的指数再传进参数递归。

技术分享
#include<iostream>
#include<algorithm>
#include<cmath>
#include<cstring>
using namespace std;
void f(int n){
    int m=n;
    bool flag=0;
    while(n>0){
        int t=0;
        while(n>0){
        n/=2;
        ++t;
        }
        if(t==0)return ;
        if(t==1){
            if(flag)cout<<"+";flag=1;
            cout<<"2(0)";
        }
        else if(t==2){
            if(flag)cout<<"+";flag=1;
            cout<<"2";
        }
        else{
            if(flag)cout<<"+";flag=1;
            cout<<"2(";f(t-1);cout<<")";
        }
        n=m-pow(2,t-1);
        m=n;
    }
    
}
int main(){
    int n;
    cin>>n;
    f(n);
    return 0;
}
View Code

总结:noip1998的题除了第3题,其他就是一点思维难度都没有的题。模版不要打错,细节不要忽略即可。

以上是关于NOIP1998普及组解题报告的主要内容,如果未能解决你的问题,请参考以下文章

NOIP2017普及组解题报告

NOIP1999普及组解题报告

NOIP2002普及组解题报告

NOIP2012普及组 (四年后的)解题报告 -SilverN

NOIP2016普及组复赛解题报告

NOIP2001普及组解题报告