zoukankan      html  css  js  c++  java
  • 2020-05-22 — 习题训练二

    A - Candies

     题意:
     根据这个公式x+2x+4x++2k1x=nx+2x+4x+⋯+2k−1x=n和n的值求x可以是多少。

    题解:

    左边那个式子是一个等比数列的和,所以可以化简成(2^k-1)*x=n 然后把括号里的式子移过去,x=n/(2^k-1),再遍历下求出x就好

    代码:

    #include<bits/stdc++.h>
    #define ll long long
    using namespace std;
    int main(){
        int t;
        ll n;
        cin>>t;
        while(t--){
            cin>>n;
            for(int i=2;i<n;i++){
                ll a=pow(2,i);
                if(n%(a-1)==0){
                    cout<<n/(a-1)<<endl;
                    break;
                }
            }
        }
        return 0;
    } 

    B - Balanced Array

     题意:

    给定一个n要求是否有一个这样的式子前面n/2是偶数,后面n/2是奇数,前面n/2的数的和等于后面n/2的数的和

    题解:

    首先可以判断如果n/2是奇数的话是不可能有这样的式子的,因为左边就是奇数个,右边也是奇数个,右边加起来还是奇数。所以前n/2个从2开始加(2,4,6……),后n/2-1个从1开始加,最后一个数就是前n/2的和-后n/2-1的和。

    代码:

    #include<bits/stdc++.h>
    using namespace std;
    int main(){
        int t,n,k,l,sum1,sum2;
        cin>>t;
        while(t--){
            cin>>n;
            k=2,l=1;
            sum1=0,sum2=0;
            if((n/2)%2!=0){
                cout<<"NO"<<endl; 
            }
            else{
                cout<<"YES"<<endl;
                while(k<n+1){
                    cout<<k<<" ";
                    sum1+=k;
                    k+=2;
                }
                while(l<=n-2){
                    cout<<l<<" ";
                    sum2+=l;
                    l+=2;
                }
                cout<<sum1-sum2<<endl;
            } 
        }
        return 0;
    } 

    C - Ichihime and Triangle

     题意:

    给定一个abcd和x,y,z的范围,问是否存在有x,y,z构成三角形。

    题解:

    a<=x<=b,b<=y<=c,c<=z<=d,根据三角形定理两边之和大于第三边,只要有两个长的边相等,那么另外一个边不论多少都可以。所以就取y=c,z=c,x=a就可以了。

    代码:

    #include<bits/stdc++.h>
    #define ll long long
    using namespace std;
    int main(){
        int t;
        ll a,b,c,d;
        cin>>t;
        while(t--){
            cin>>a>>b>>c>>d;
            cout<<b<<" "<<c<<" "<<c<<endl;//要2个大的相加一定大于第3个边 
        }
        return 0;
    }

    D - Kana and Dragon Quest game

    题意:

    对一个x血量的怪物,有两个技能一个是对它的血量x/2+10,还有一个是x-10,给定x和y的次数问能否打败怪兽。

    题解:

    可知当x血量越少的时候第一个技能扣去的越少,到后面还有可能使怪物血量变多- -。所以只要一直使用1技能直到不能再使怪物血量变少的时候(x/2+10-x>=0时就用二技能),再用二技能就好了。

    代码:

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

    E - Candies and Two Sisters

    题意:

    给一个n,把他分成a和b,要求a>b,问有几种可能使a>b.

    题解:

    如过n是奇数就有n/2种,如果是偶数就有n/2-1种,再特判一下n<=2的时候.

    代码:

    #include<bits/stdc++.h>
    #define ll long long
    using namespace std;
    int main(){
        int t;
        ll n,sum;
        cin>>t;
        while(t--){
          cin>>n;
          sum=n/2;
          if(n<=2){
              cout<<0<<endl;
              continue;
          }
          else{
              if(n%2==0){
                  sum--;
              }
          }    
          cout<<sum<<endl;
        }
        return 0;
    }

    F - Construct the String

     题意:

    在一个长度n的字符串中每个a长度的子串中都有b个元素,答案一定存在,让我们写一种。

    题解:

    其实先得到含有b个元素的子串,然后再一直循环排列就好,因为a>b,所以在a中最少都有b的一个子串,就都含有这些元素了。

    代码:

    #include<bits/stdc++.h>
    using namespace std;
    int main(){
        int t;
        int n,a,b,l,k;
        string p;
        cin>>t;
        while(t--){
            cin>>n>>a>>b;
            p="";
            for(int i='a';i<='a'+b-1;i++){
                p+=i;//得到b长度有b个不同字符的子串。
            }
            l=n%p.size();//剩余几个元素。
            k=n/p.size();//在n中能循环几次子串
            while(k--){
                cout<<p;
            }
            for(int i=0;i<l;i++){
                cout<<p[i];
            }
            cout<<endl;
        }
        return 0;
    }

     

  • 相关阅读:
    bootstrap基础(四)
    bootstrap基础(三)
    bootstrap基础(二)
    python @staticmethod和@classmethod
    python的数据类型可变不可变
    json.dumps()和json.loads()和eval()
    Linux如何查看端口状态
    python 同时遍历两个list
    dogedoge浏览器爬取标题
    虚拟机数据库连接Windows本地数据库
  • 原文地址:https://www.cnblogs.com/liyongqi/p/12960430.html
Copyright © 2011-2022 走看看