2020.5.24--习题二 题解
Posted mxw000120
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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三条边,同时满足
- a≤x≤b.
- b≤y≤c
- c≤z≤d
- 因为端点值均存在,所以可以直接设两边相等,另一条边取较小的数,是三角形成立,
-
#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; } }
以上是关于2020.5.24--习题二 题解的主要内容,如果未能解决你的问题,请参考以下文章
算法零基础学习关于二维数组的一些基础练习题 | leetcode1672158283248题解
算法零基础学习关于二维数组的一些基础练习题 | leetcode1672158283248题解