当前位置:编程学习 > C/C++ >>

nyoj 稍具技巧的题

这题可以用中国剩余定理(这个我不会),我用的只是从1到105逐个搜索

[cpp]
#include<iostream> 
using namespace std; 
int main() 

    int a,b,c; 
    cin>>a>>b>>c; 
    int n=(a*70+b*21+c*15)%105; 
    if(n>100||n<10) cout<<"No answer"<<endl; 
    else cout<<n<<endl; 
    return 0; 

小明的调查作业 nyoj 48
此题根据规模进行,可以开一个a【1005】的数组,每读一个i,
就把a【i】赋值为true,然后遍历输出,重复计算问题,也挺省时间的。

[cpp]
#include<iostream> 
#include<cstring> 
using namespace std; 
int main() 

    int n, num; 
    int count=0; 
    int vis[1005]; 
    cin>>n; 
    memset(vis, 0, sizeof(vis)); 
    while(n--) 
    { 
              cin>>num; 
              if(!vis[num]) 
              { 
                        vis[num]=1; 
                        count++; 
              } 
    } 
    cout<<count<<endl; 
    for(int i=1;i<=1000;i++) 
            if(vis[i]) 
                        cout<<i<<" "; 
     
    cout<<endl; 
    return 0; 

数的长度 nyoj 69

此题有一种很准确的方法叫斯特林(Stirling)公式;

还有一种也能行,不过数太大时就不是非常准确的方法:

for(int i=1;i<=m;i++)
                      num += log10(i);

就是对每个乘数取对数

[cpp] 
#include<iostream> 
#include<cmath> 
using namespace std; 
int main() 

    int N; 
    cin>>N; 
    while(N--) 
    { 
              int m; 
              double num = 0.0; 
              cin>>m; 
              for(int i=1;i<=m;i++) 
                      num += log10(i); 
              cout<<(int)(num)+1<<endl; 
    } 
    return 0; 

房间安排 nyoj 168
用数组a【201】存放第i天中每天需要的房间数,读房间数、天数,然后找出数组中

最大的元素#include<algorithm>
int p = max_element(a, a+200)-a;
              cout<<a[p]<<endl;
[cpp] 
#include<iostream> 
#include<cstring> 
#include<algorithm> 
using namespace std; 
int a[201];    //第i天的房间数  
int main() 

    int T; 
    cin>>T; 
    while(T--) 
    { 
              memset(a, 0, sizeof(a)); 
              int N, num, start, day; 
              cin>>N; 
              while(N--) 
              { 
                    cin>>num>>start>>day; 
                    for(int i=0;i<day;i++) 
                            a[start+i] += num;     
              } 
              int p = max_element(a, a+200)-a; 
              cout<<a[p]<<endl; 
    } 
    return 0; 

素数 nyoj 169
主函数部分设计的很巧妙,先近后远,距离相等的话先大后小

[cpp] 
#include<iostream> 
using namespace std; 
bool fan(int a) 

    bool b=true; 
    int i; 
    if(a==1) 
        b=false; 
    else 
        for(i=2;i<a;i++) 
        { 
            if(a%i==0) 
            {b=false;break;} 
        } 
    return b; 

int main() 

    int n; 
    cin>>n; 
    while(n--) 
    { 
        int m,i; 
        cin>>m; 
        for(i=0;;i++) 
        { 
            if(fan(m+i)) 
            {cout<<m+i<<endl;break;} 
            if(fan(m-i)) 
            {cout<<m-i<<endl;break;} 
        } 
    }&n

补充:软件开发 , C++ ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,