2020.5.24--习题二 题解

A - Candies

 题解:给出一个数n,求x,使得  x+2x+4x+.....+2^(k-1)x=n成立

由此可得出x=n/(1+2+4+...+2^(k-1));不用求k的值

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int t;
    cin>>t;
    while(t--)
    {
       int n;
       cin>>n;
       int sum=3;
       int p=2;
       while(n%sum!=0)
       {
           sum+=pow(2,p);
           p++;
       }
       cout<<n/sum<<endl;
    }
}

B - Balanced Array

 题解:给出一个数n,若可以求出前n/2个数为偶数,后n/2为奇数,且偶数和等于奇数和则输出YES,第二行输出符合的数组,否则输出NO

直接按2 4 6 8...排出n/2个偶数并算出总和,再按1 3 5....计算出后n/2-1个奇数的和,相减得出的数若为奇数则输出YES及数组,否则输出NO

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int t;
    cin>>t;
    while(t--)
    {
        int i,j,n;
        cin>>n;
        int s[n+5];
        if(n==2)cout<<"NO"<<endl;
        else {
            int sum=0,k=2,p=1;
            for(i=0;i<n/2;i++)//前n/2个偶数
            {
                s[i]=k;
                k+=2;
                sum+=s[i];
            }
            for(j=n/2;j<n-1;j++)//n/2-1个奇数
            {
                s[j]=p;
                p+=2;
                sum-=s[j];//最终得到最后一位数             
            }
            if(sum!=0&&sum%2!=0)//最后一位为奇数时
            {
                s[n-1]=sum;
                cout<<"YES"<<endl;
                for(i=0;i<n;i++)
                {
                    cout<<s[i]<<" ";
                }
                cout<<endl;
            }
            else cout<<"NO"<<endl;
        }
    }
}

C - Ichihime and Triangle

 题解:给出a,b,c,d四个数,求出满足三角形的x,y,z三条边,同时满足

  • axb.
  • byc
  • czd
  • 因为端点值均存在,所以可以直接设两边相等,另一条边取较小的数,是三角形成立,
  • #include<bits/stdc++.h>
    using namespace std;
    int main()
    {
        long long t;
        cin>>t;
        while(t--)
        {
            long long  a,b,c,d;
            cin>>a>>b>>c>>d;
            long long x,y,z;
            x=a;
            y=c;
            z=c;//也可以是b c c
            cout<<x<<" "<<y<<" "<<z<<" "<<endl;
        }
    }

    D - Kana and Dragon Quest game

     题解:计算出第二种操作可以使x减少的总数,1.若x<=10*m,则输出YES,2.若x>10*m,则先进行第一种操作当x<=10*m时输出YES,否则输出NO

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

    E - Candies and Two Sisters

     题解:a要比b大,且a+b=n,求满足条件的数量;当n为偶数时有n/2-1个,当n为奇数时有n/2个

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

    F - Construct the String

    题解: 给出一个字符串的长度n,要求长度为a的子字符串中有b个不同的字母,求出该字符串

  • 不用管a的大小,直接根据b来给出一个长度为b且有b个不同元素的子字符串,并重复n/b次,不足的继续输出即可
  • #include<bits/stdc++.h>
    using namespace std;
    int main()
    {
        int t;
        cin>>t;
        while(t--)
        {
            int n,a,b;
            cin>>n>>a>>b;
            char ch='a';
            while(n)
            {
                for(int i=0;i<b;i++)
                {
                    if(n==0)break;
                    printf("%c",ch);
                    ch++;
                    n--;
                }
                ch='a';
            }
            cout<<endl;
        }
    }

猜你喜欢

转载自www.cnblogs.com/mxw000120/p/12951963.html