2020/5/23习题训练二

A - Candies

   题意:对于X+2X+4X+...+2n-1X=n, 保证至少有一个解,求一个整数X满足这个等式(k>1)

              等比数列求和得X(2K-1)=n ,所以X=n/(2k-1)

               让k从2开始依次增加直到找到符合条件的数输出

#include<iostream>
#include<cmath>
#include<cstdio>
#include<algorithm>
using namespace std;
typedef long long ll;
int main(){
    ll t;
    cin>>t;
    while(t--){
        ll n;
        cin>>n;
        for(ll k=2;;k++){
            ll item=pow(2,k)-1;
            if(n%item==0){
                cout<<n/item<<endl;
                break;
            }
        }
        
    }
    return 0;
} 
View Code

B - Balanced Array

   题意:构建一个数组 1.前n/2个元素是偶数,2.后n/2个元素是奇数 3.前n/2个元素等于后n/2个元素

              可以构造出时,输出YES和这样一个数组,反之输出NO ( 保证输入的n为偶数 )

              分析知前n/2个元素的和为偶数,则后n/2个元素的和也应该为偶数,又因为后n/2个元素均为奇数,

              所以n/2为偶数时可以构造出这样一个数组,对于1到n/2之间的元素从2,4,6……依次输出,和

             为sum1,对于n/2+1到n-1之间的元素从1,3,5……输出,和为sum2,最有一个元素为sum1-sum2 

#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std;
int main(){
    int t;
    cin>>t;
    while(t--){
        int n;
        cin>>n;
        if((n/2)%2!=0){
            cout<<"NO"<<endl;
        }else{
            cout<<"YES"<<endl;
            int sum1=0,sum2=0;
            for(int i=2;i<=n;i=i+2){
                cout<<i<<" ";
                sum1+=i; 
            }
            for(int i=2;i<=n-2;i=i+2){
                cout<<i-1<<" ";
                sum2+=i-1;
            }
            cout<<sum1-sum2<<endl;
        }
    }
    return 0;
} 
View Code

C - Ichihime and Triangle

       题意:就给四个数a,b,c,d, ≤ ≤ 分成三段,

  • ≤ ≤ b
  • ≤ c
  • ≤ d

        每一段选一个数,使其构成一个三角形;求能构成三角形的一组数

       根据两边之和大于第三边,可以找两条大边再找一条小边例如x=b,y=c,z=c

#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
int main(){
    int t;
    cin>>t;
    while(t--){
        int a,b,c,d;
        cin>>a>>b>>c>>d;
        cout<<b<<" "<<c<<" "<<c<<endl;
    }
    return 0;
} 
View Code

D - Kana and Dragon Quest game

         题意:打怪兽,怪兽血量为X,有两种攻击方法1.X=X/2+10   2.X=X-10

                     方法1可以使用n次,方法2可以使用m次,判断能否把怪兽杀死

                     但只有x>x/2+10(x>20时)可以使用方法一,先使用方法一直到不能再用

                     在使用m次方法二判断是否能杀死怪兽

#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
int main(){
    int t,i,j;
    cin>>t;
    while(t--){
        int x,m,n;
        cin>>x>>n>>m;
        if(x>20){
            for(i=1;i<=n&&x>20;i++){
                x=x/2+10;
            }
        }
        if(x<=m*10){
            cout<<"YES"<<endl;
        }else{
            cout<<"NO"<<endl;
        }
    }
       return 0;
}
View Code

E - Candies and Two Sisters

           题意:给两个姐妹分糖分别为a,b,且a+b=n,a<b,即a<n-a ( a<n/2);

                     输出有多少种分配方法;

                     当n为偶数的时候,a有n/2-1种取法

                     当n为奇数的时候,a有(int)n/2种取法

#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
typedef long long ll;
int main(){
    int t;
    cin>>t;
    while(t--){
       int n,end;
        cin>>n;
        if(n%2==1){
            end=n/2;
        }else{
            end=n/2-1;
        }
        cout<<end<<endl;
    }
    return 0;
} 
View Code

F - Construct the String

        题意:构造长度为n的字符串,且长度为a的每个子字符串都有b个完全不同的字母。

                   构造长度为b的子字符串循环输出

#include<iostream>
#include<cmath>
#include<string>
#include<cstdio>
using namespace std;
int main(){
    int t;
    cin>>t;
    while(t--){
        int n,a,b;
        char c;
        cin>>n>>a>>b;
        for(int i=0;i<n;i++){
            c=i%b+'a';
            cout<<c;
        }
        cout<<endl;
    }
    return 0;
} 
View Code

 

 

 

posted @ 2020-05-25 23:04  Endeavo_r  阅读(133)  评论(0)    收藏  举报