5-22 习题训练题解

Posted kingstar1

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了5-22 习题训练题解相关的知识,希望对你有一定的参考价值。

A题,看题目的意思应该是有解的,n的范围又是1e9,所以算出从2的一次方到2的三十次方依次的和在判断哪一个合适就可以。

#include<bits/stdc++.h>
using namespace std;
#define LL long long
int main()
{
    LL a[100];
    a[0]=1;
    LL num=1;
    for(int i=1;i<30;i++)
    {
        a[i]=a[i-1]+num*2;
        num=num*2;
    }
    int t;
    cin>>t;
    while(t--)
    {
        LL n;
        cin>>n;
        for(int i=1;i<30;i++)
        {
            if(n%a[i]==0)
            {
                cout<<n/a[i]<<endl;
                break;
            }
        }
    }
}

 

B题,当n是奇数或者n/2是奇数的时候就不符合条件,不然偶数就输出2.4.6…..n,奇数就输出1.3.5…n-1+n/2。

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int t;
    cin>>t;
    while(t--)
    {
        int n;
        cin>>n;
        if(n%2==1||((n/2)%2==1))cout<<"NO"<<endl;
        else
        {
            cout<<"YES"<<endl;
            for(int i=1;i<=n/2;i++)cout<<i*2<<" ";
            for(int i=1;i<n/2;i++)cout<<i*2-1<<" ";
            cout<<n-1+(n/2)<<endl;
        }
    }
}

C题,给出三条边的范围,让其中长的两条边相等就一定能组成三角形。

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int t;
    cin>>t;
    while(t--)
    {
        int a,b,c,d;
        cin>>a>>b>>c>>d;
        cout<<a<<" "<<c<<" "<<c<<endl;
    }
}

D题,如果那个数大于20,就用第一个方案,直到数小于等于20,或者次数用完,然后将剩下的数和第二个方案的次数乘10相比较,小于就不行,大于就可以。

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int t;
    cin>>t;
    while(t--)
    {
        int x,n,m;
        cin>>x>>n>>m;
        while(n--)
        {
            if(x<=20)break;
            x=x/2+10;
        }
        if(x<=10*m)cout<<"YES"<<endl;
        else cout<<"NO"<<endl;
    }
}

E题,如果n是奇数,a一直可以从1到n/2,偶数,可以从1到n/2-1,一共有(n/2)-1种情况。

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int t;
    cin>>t;
    while(t--)
    {
        long long n;
        cin>>n;
        cout<<(n-1)/2<<endl;
    }
}

F题,制造一个长度为a包含b个不同字母的字符串,然后输出n/a个s如果n%a!=0在输出s前n%a个字符,就可以。

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int t;
    cin>>t;
    while(t--)
    {
        int n,a,b;
        cin>>n>>a>>b;
        string s;
        for(int i=a;i<a+b;i++)
        {
            s+=i;
        }
        int o=a-b;
        while(o--)
        {
            s=a+s;
        }
        int v=n/a,num=n%a;
        while(v--)
        {
            cout<<s;
        }
        for(int i=0;i<num;i++)
        {
            cout<<s[i];
        }
        cout<<endl;
    }
}

以上是关于5-22 习题训练题解的主要内容,如果未能解决你的问题,请参考以下文章

习题训练二 题解

2020-05-26 — 习题训练 题解

2020-05-26 — 习题训练 题解

2020/6/1习题训练四

2020/6/1习题训练四

校内训练0602 习题exercise